Добавил возможность делать дампы кэша и восстанавливать их
parent
d369267c21
commit
469c273292
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue