migrate from github
This commit is contained in:
Vendored
+67
@@ -0,0 +1,67 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/XingfenD/yoresee_doc/pkg/storage"
|
||||
"github.com/bytedance/sonic"
|
||||
"github.com/redis/go-redis/v9"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
func GetJSON(ctx context.Context, key string, dst interface{}) (bool, error) {
|
||||
b, err := storage.KVS.Get(ctx, key).Bytes()
|
||||
if err == redis.Nil {
|
||||
return false, nil
|
||||
}
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if err := sonic.Unmarshal(b, dst); err != nil {
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func SetJSON(ctx context.Context, key string, v interface{}, ttl time.Duration) error {
|
||||
b, err := sonic.Marshal(v)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return storage.KVS.Set(ctx, key, b, ttl).Err()
|
||||
}
|
||||
|
||||
func DeleteByPattern(ctx context.Context, pattern string) error {
|
||||
iter := storage.KVS.Scan(ctx, 0, pattern, 100).Iterator()
|
||||
for iter.Next(ctx) {
|
||||
_ = storage.KVS.Del(ctx, iter.Val()).Err()
|
||||
}
|
||||
return iter.Err()
|
||||
}
|
||||
|
||||
func DoubleDelete(ctx context.Context, writeDB func() error, keys ...string) error {
|
||||
if err := deleteKeys(ctx, keys); err != nil {
|
||||
logrus.Warn("First cache deletion failed: ", err)
|
||||
}
|
||||
|
||||
if err := writeDB(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
go func() {
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
if err := deleteKeys(ctx, keys); err != nil {
|
||||
logrus.Warn("Second cache deletion failed: ", err)
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func deleteKeys(ctx context.Context, keys []string) error {
|
||||
if len(keys) == 0 {
|
||||
return nil
|
||||
}
|
||||
return storage.KVS.Del(ctx, keys...).Err()
|
||||
}
|
||||
Reference in New Issue
Block a user