diff --git a/cache/abstract.go b/cache/abstract.go new file mode 100644 index 0000000..56a790e --- /dev/null +++ b/cache/abstract.go @@ -0,0 +1,44 @@ +package cache + +import ( + "electricity_bill_calc/global" + "time" + + "github.com/go-redis/redis/v8" + "github.com/vmihailenco/msgpack/v5" +) + +func Cache[T interface{}](key string, value *T, expires time.Duration) error { + serializedValue, err := msgpack.Marshal(value) + + if err != nil { + return err + } + cmd := global.RedisConn.SetEX(global.Ctx, key, serializedValue, expires) + return cmd.Err() +} + +func Retreive[T interface{}](key string) (*T, error) { + result, err := global.RedisConn.Get(global.Ctx, key).Result() + if err != nil { + if err == redis.Nil { + return nil, nil + } else { + return nil, err + } + } + value := new(T) + err = msgpack.Unmarshal([]byte(result), value) + if err != nil { + return nil, err + } + return value, nil +} + +func Exists(key string) (bool, error) { + result, err := global.RedisConn.Exists(global.Ctx, key).Result() + if err != nil { + return false, err + } + return result > 0, nil +}