You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.4 KiB
59 lines
1.4 KiB
package xredis |
|
|
|
// |
|
//import ( |
|
// "context" |
|
// "encoding/json" |
|
// "fmt" |
|
// "github.com/go-redis/redis/v8" |
|
// "github.com/pkg/errors" |
|
// "time" |
|
//) |
|
// |
|
//var redisClient *redis.Client |
|
// |
|
//func Init(host, password string, db int) error { |
|
// redisClient = redis.NewClient(&redis.Options{ |
|
// Network: "tcp", |
|
// Addr: host, |
|
// Password: password, |
|
// DB: db, |
|
// }) |
|
// return redisClient.Ping(context.Background()).Err() |
|
//} |
|
// |
|
//func Client() *redis.Client { |
|
// return redisClient |
|
//} |
|
// |
|
//func GetData[T any](ctx context.Context, key string, fn func() (T, error), dur time.Duration) (T, error) { |
|
// var result T |
|
// res := redisClient.Get(ctx, key).Val() |
|
// if res != "" { |
|
// err := json.Unmarshal([]byte(res), &result) |
|
// if err == nil { |
|
// return result, nil |
|
// } |
|
// } |
|
// r, err := fn() |
|
// if err != nil { |
|
// return result, err |
|
// } |
|
// if b, err := json.Marshal(r); err == nil { |
|
// redisClient.Set(ctx, key, string(b), dur) |
|
// } |
|
// return r, nil |
|
//} |
|
//func Lock[T any](ctx context.Context, key string, fn func() (T, error)) (T, error) { |
|
// var res T |
|
// lockKey := fmt.Sprintf("lock:%s", key) |
|
// ok, err := redisClient.SetNX(ctx, lockKey, 1, time.Second*20).Result() |
|
// if err != nil { |
|
// return res, errors.Wrap(err, "") |
|
// } |
|
// if !ok { |
|
// return res, errors.Wrap(errors.New(fmt.Sprintf("lock %s exists", lockKey)), "") |
|
// } |
|
// defer redisClient.Del(ctx, lockKey) |
|
// return fn() |
|
//}
|
|
|