Добавил возможность делать дампы кэша и восстанавливать их

main
serr 2025-01-06 14:32:37 +03:00
parent d369267c21
commit 469c273292
1 changed files with 10 additions and 14 deletions

View File

@ -3,13 +3,20 @@ package candycache
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"io" "io"
"reflect" "reflect"
"sync" "sync"
"time" "time"
) )
// JSON структура для создания/загрузки дампов
type Dump struct {
Key string `json:"key"`
DestroyTimestamp int64 `json:"destroyTimestamp"`
Data interface{} `json:"data"`
}
// Структура виде ключ-значение для возвращения списка элементов кэша с их ключами. // Структура виде ключ-значение для возвращения списка элементов кэша с их ключами.
type KeyItemPair struct { type KeyItemPair struct {
Key string Key string
@ -202,11 +209,7 @@ func (c *Cache) Save(w io.Writer) error {
encoder := json.NewEncoder(w) encoder := json.NewEncoder(w)
first := true first := true
for key, item := range c.storage { for key, item := range c.storage {
entry := struct { entry := Dump{
Key string `json:"key"`
DestroyTimestamp int64 `json:"destroyTimestamp"`
Data interface{} `json:"data"`
}{
Key: key, Key: key,
DestroyTimestamp: item.destroyTimestamp, DestroyTimestamp: item.destroyTimestamp,
Data: item.data, Data: item.data,
@ -239,18 +242,11 @@ func (c *Cache) Load(r io.Reader) error {
decoder := json.NewDecoder(r) decoder := json.NewDecoder(r)
if _, err := decoder.Token(); err != nil { if _, err := decoder.Token(); err != nil {
if err == io.EOF {
return fmt.Errorf("файл пустой или имеет неправильный формат")
}
return err return err
} }
for decoder.More() { for decoder.More() {
var entry struct { entry := Dump{}
Key string `json:"key"`
DestroyTimestamp int64 `json:"destroyTimestamp"`
Data interface{} `json:"data"`
}
if err := decoder.Decode(&entry); err != nil { if err := decoder.Decode(&entry); err != nil {
return err return err