43 lines
823 B
Go
43 lines
823 B
Go
|
package cache
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"context"
|
||
|
"encoding/gob"
|
||
|
"github.com/redis/go-redis/v9"
|
||
|
)
|
||
|
|
||
|
func StoreCacheGob[Data any](ctx context.Context, rdb *redis.Client, key string, data Data) error {
|
||
|
var buffer bytes.Buffer
|
||
|
encoder := gob.NewEncoder(&buffer)
|
||
|
|
||
|
// Serialize struct to Gob
|
||
|
err := encoder.Encode(data)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Store data in Redis
|
||
|
return rdb.Set(ctx, key, buffer.Bytes(), 0).Err()
|
||
|
}
|
||
|
|
||
|
func GetCacheGob[Data any](ctx context.Context, rdb *redis.Client, key string) (Data, error) {
|
||
|
var data Data
|
||
|
|
||
|
binData, err := rdb.Get(ctx, key).Bytes()
|
||
|
if err != nil {
|
||
|
return data, err
|
||
|
}
|
||
|
|
||
|
buffer := bytes.NewBuffer(binData)
|
||
|
decoder := gob.NewDecoder(buffer)
|
||
|
|
||
|
// Deserialize Gob binary back to struct
|
||
|
err = decoder.Decode(&data)
|
||
|
if err != nil {
|
||
|
return data, err
|
||
|
}
|
||
|
|
||
|
return data, nil
|
||
|
}
|