functions for manipulating gobs
parent
50072202ca
commit
61d93d1cc9
|
@ -0,0 +1,42 @@
|
|||
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
|
||||
}
|
Loading…
Reference in New Issue