From cf93574294a104ca6a66509f0b317211be18d078 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Thu, 11 Aug 2022 20:57:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(cache):=E5=8A=A0=E5=85=A5=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E7=BC=93=E5=AD=98=E5=87=BD=E6=95=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cache/abstract.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 cache/abstract.go 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 +}