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

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