5 Star 0 Fork 0

Md / gu

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
manager_redis.go 19.20 KB
一键复制 编辑 原始数据 按行查看 历史
liyafei 提交于 2024-03-13 11:52 . 增加 redis 函数 增加 grafana 实现
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
package goredis
import (
"errors"
"fmt"
"reflect"
"strings"
"time"
"gitee.com/MikeDDD/gu/logs"
"github.com/go-redis/redis/v8"
"github.com/golang/protobuf/proto"
)
func ExpireCli(cli *RedisClienterInstance, key any, t time.Duration) (err error) {
cmd := cli.Rc.Expire(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), t)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoExpire error! key=%v, err=%v", key, cmd.Err())
return cmd.Err()
}
return nil
}
func PersistCli(cli *RedisClienterInstance, key any) (err error) {
cmd := cli.Rc.Persist(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoPersist error! key=%v, err=%v", key, cmd.Err())
return cmd.Err()
}
return nil
}
func TTLCli(cli *RedisClienterInstance, key any) (s time.Duration, err error) {
cmd := cli.Rc.TTL(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoTTL error! key=%v, err=%v", key, cmd.Err())
return -1, cmd.Err()
}
return cmd.Val(), nil
}
func KeysCli(cli *RedisClienterInstance, key any) (field []string, err error) {
res := cli.Rc.Keys(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("Redis Do KEYS error! key=%v, err=%v", key, res.Err())
return field, res.Err()
}
for _, v := range res.Val() {
field = append(field, strings.Replace(v, fmt.Sprintf("%v:", cli.serverid), "", -1))
}
return field, nil
}
func DelCli(cli *RedisClienterInstance, keys ...string) error {
var tempKey []string
for _, key := range keys {
key = fmt.Sprintf("%v:%v", cli.serverid, key)
tempKey = append(tempKey, key)
}
res := cli.Rc.Del(cli.ctx(), tempKey...)
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("Del fail", res.Err())
return res.Err()
}
return nil
}
func ExistsCli(cli *RedisClienterInstance, key any) (bool, error) {
res := cli.Rc.Exists(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("Redis Do EXISTS error! key=%v, err=%v", key, res.Err())
return false, res.Err()
}
return res.Val() > 0, nil
}
func SetExtCli(cli *RedisClienterInstance, key any, p any) (err error) {
bytes, err := proto.Marshal(p.(proto.Message))
if err != nil {
logs.Error("Protobuf Marshal error:%v", err)
return err
}
res := cli.Rc.Set(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), bytes, time.Hour*2)
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("Redis Do HEXISTS error! key=%v, err=%v", key, res.Err())
return res.Err()
}
return nil
}
// -1 永不过期
func SetCli(cli *RedisClienterInstance, key, value string, ttl time.Duration) error {
if res := cli.Rc.Set(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), value, ttl); res.Err() != nil &&
!errors.Is(res.Err(), redis.Nil) {
logs.Error("Redis set error! %v", res.Err())
return res.Err()
}
return nil
}
/*
String CompareAndSwap 带 ttl
当 key 不存在时:
写入 newValue 返回 true
当 key 存在时:
当 value==oldValue 时,写入 newValue 返回 true
当 value!=oldValue 时,返回 false
*/
func SetCliCas(cli *RedisClienterInstance, key, oldValue, newValue string, second int64) (bool, error) {
res, err := cli.Rc.Eval(
cli.ctx(),
`
local old=redis.call('get', KEYS[1])
if not old or old==ARGV[1] then
if redis.call('setex', KEYS[1], ARGV[3], ARGV[2]) then
return 1
else
return 0
end
else
return 0
end
`,
[]string{fmt.Sprintf("%v:%v", cli.serverid, key)},
[]any{oldValue, newValue, second},
).Result()
if err != nil && !errors.Is(err, redis.Nil) {
return false, err
}
if res.(int64) == 1 {
return true, nil
} else {
return false, nil
}
}
func EvalCli(cli *RedisClienterInstance, script string, key string, args []any) (any, bool, error) {
res, err := cli.Rc.Eval(
cli.ctx(),
script,
[]string{fmt.Sprintf("%v:%v", cli.serverid, key)},
args,
).Result()
if err != nil && !errors.Is(err, redis.Nil) {
return res, false, err
}
return res, true, nil
}
func GetCli(cli *RedisClienterInstance, key string) (string, error) {
res := cli.Rc.Get(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("Redis set error! %v", res.Err())
return "", res.Err()
}
return res.Val(), nil
}
func GetExtCli(cli *RedisClienterInstance, key any, p any) (exists bool, err error) {
res := cli.Rc.Get(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("Redis Do GetExt error! key=%v, err=%v", key, res.Err())
return false, res.Err()
}
if len(res.Val()) < 1 {
return false, nil
}
err = proto.Unmarshal([]byte(res.Val()), p.(proto.Message))
if err != nil {
logs.Error("Redis Do GET Protobuf Unmarshal error! key=%v, err=%v", key, err)
return false, err
}
return true, nil
}
func HGetCli(cli *RedisClienterInstance, key any, field any) string {
res := cli.Rc.HGet(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), fmt.Sprintf("%v", field))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("HGet fail", res.Err())
return ""
}
return res.Val()
}
func HGetExtCli(cli *RedisClienterInstance, key any, field any, p any) (exists bool, ok bool) {
res := cli.Rc.HGet(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), fmt.Sprintf("%v", field))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("DoHGetExt fail:", res.Err())
return false, false
}
if len(res.Val()) < 1 {
return false, true
}
err := proto.Unmarshal([]byte(res.Val()), p.(proto.Message))
if err != nil {
logs.Error("Redis Do HGET Protobuf Unmarshal error! key=%v, field=%v, err=%v", key, field, err)
return false, false
}
return true, true
}
func HSetCli(cli *RedisClienterInstance, key any, field any, p any) bool {
_, err := cli.Rc.HSet(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), fmt.Sprintf("%v", field), fmt.Sprintf("%v", p)).Result()
if err != nil && !errors.Is(err, redis.Nil) {
logs.Error("HSet fail", err, p)
return false
}
return true
}
func HSetExtCli(cli *RedisClienterInstance, key any, field any, p any) (err error) {
bytes, err := proto.Marshal(p.(proto.Message))
if err != nil && !errors.Is(err, redis.Nil) {
logs.Error("Redis Do HSET Protobuf Marshal error! key=%v, field=%v, err=%v", key, field, err)
return err
}
res := cli.Rc.HSet(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), field, bytes)
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("DoHSetExt fail", res.Err())
return res.Err()
}
return nil
}
func HValsCli(cli *RedisClienterInstance, key any) (p []string, err error) {
res := cli.Rc.HVals(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error(res.Err())
return nil, res.Err()
}
return res.Val(), nil
}
func HValsExtCli(cli *RedisClienterInstance, key any, p any) (err error) {
res := cli.Rc.HVals(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error(res.Err())
return res.Err()
}
vs := res.Val()
results := reflect.ValueOf(p)
if results.Kind() == reflect.Ptr {
results = results.Elem()
}
for _, v := range vs {
newItem := reflect.New(getStructType(p)).Interface()
err = proto.Unmarshal([]byte(v), newItem.(proto.Message))
if err != nil {
logs.Error("Redis Do HVALS Protobuf Unmarshal error! key=%v, err=%v", key, err)
return
}
results.Set(reflect.Append(results, reflect.ValueOf(newItem)))
}
return nil
}
func HLenCli(cli *RedisClienterInstance, key any) (int64, error) {
res := cli.Rc.HLen(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error(res.Err())
return 0, res.Err()
}
return res.Val(), nil
}
func HDelCli(cli *RedisClienterInstance, key string, fields ...string) error {
if len(fields) == 0 {
return nil
}
res := cli.Rc.HDel(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), fields...)
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("HDel fail", res.Err())
return res.Err()
}
return nil
}
func HExistsCli(cli *RedisClienterInstance, key any, field any) (bool, error) {
res := cli.Rc.HExists(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), fmt.Sprintf("%v", field))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("Redis Do HEXISTS error! key=%v, err=%v", key, res.Err())
return false, res.Err()
}
return res.Val(), nil
}
func HKeysCli(cli *RedisClienterInstance, key any) (field []string, err error) {
res := cli.Rc.HKeys(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("Redis Do HKEYS error! key=%v, err=%v", key, res.Err())
return field, res.Err()
}
return res.Val(), nil
}
func HIncrByCli(cli *RedisClienterInstance, rk, hk string, hv int64) int64 {
res := cli.Rc.HIncrBy(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, rk), hk, hv)
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("HIncrBy fail", res.Err())
return -1
}
return res.Val()
}
// ======== zset ========
func ZAddCli(cli *RedisClienterInstance, key string, score float64, member string) (err error) {
res := cli.Rc.ZAdd(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), &redis.Z{
Member: member,
Score: score,
})
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("ZAdd fail", res.Err())
return res.Err()
}
return nil
}
func ZIncrByCli(cli *RedisClienterInstance, key string, score float64, member string) (err error) {
res := cli.Rc.ZIncrBy(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), score, member)
if res.Err() != nil && !errors.Is(res.Err(), redis.Nil) {
logs.Error("ZIncr fail", res.Err())
return res.Err()
}
return nil
}
func ZRevRangeWithScoresCli(cli *RedisClienterInstance, key string, start, stop int64) (err error, memberResult []string, scoreResult []float64) {
cmd := cli.Rc.ZRevRangeWithScores(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), start, stop)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis ZRevRangeWithScores error! key=%v, start=%v, stop=%v, err=%v", key, start, stop, cmd.Err())
return
}
for _, val := range cmd.Val() {
memberResult = append(memberResult, val.Member.(string))
scoreResult = append(scoreResult, val.Score)
}
return
}
func ZRevRangeByScoreWithScoresCli(cli *RedisClienterInstance, key string, min, max string, offset, count int64) (err error, memberResult []string, scoreResult []float64) {
cmd := cli.Rc.ZRevRangeByScoreWithScores(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), &redis.ZRangeBy{
Min: min,
Max: max,
Offset: offset,
Count: count,
})
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis ZRevRangeWithScores error! key=%v, start=%v, stop=%v, %v %v err=%v", key, min, max, offset, count, cmd.Err())
return
}
for _, val := range cmd.Val() {
memberResult = append(memberResult, val.Member.(string))
scoreResult = append(scoreResult, val.Score)
}
return
}
func ZRangeByScoreWithScoresCli(cli *RedisClienterInstance, key string, min, max string, offset, count int64) (err error, memberResult []string, scoreResult []float64) {
cmd := cli.Rc.ZRangeByScoreWithScores(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), &redis.ZRangeBy{
Min: min,
Max: max,
Offset: offset,
Count: count,
})
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis ZRevRangeWithScores error! key=%v, start=%v, stop=%v, %v %v err=%v", key, min, max, offset, count, cmd.Err())
return
}
for _, val := range cmd.Val() {
memberResult = append(memberResult, val.Member.(string))
scoreResult = append(scoreResult, val.Score)
}
return
}
func ZRangeByScoreCli(cli *RedisClienterInstance, key string, min, max string, offset, count int64) (err error, memberResult []string) {
cmd := cli.Rc.ZRangeByScore(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), &redis.ZRangeBy{
Min: min,
Max: max,
Offset: offset,
Count: count,
})
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis ZRevRangeWithScores error! key=%v, start=%v, stop=%v, %v %v err=%v", key, min, max, offset, count, cmd.Err())
return
}
for _, val := range cmd.Val() {
memberResult = append(memberResult, val)
}
return
}
func ZRevRangeCli(cli *RedisClienterInstance, key string, start, stop int64) (err error, memberResult []string) {
cmd := cli.Rc.ZRevRange(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), start, stop)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis ZRevRangeWithScores error! key=%v, start=%v, stop=%v, err=%v", key, start, stop, cmd.Err())
return
}
for _, val := range cmd.Val() {
memberResult = append(memberResult, val)
}
return
}
func ZRangeWithScoresCli(cli *RedisClienterInstance, key string, start, stop int64) (err error, memberResult []string, scoreResult []float64) {
cmd := cli.Rc.ZRangeWithScores(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), start, stop)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis ZRangeWithScores error! key=%v, start=%v, stop=%v, err=%v", key, start, stop, cmd.Err())
return
}
for _, val := range cmd.Val() {
scoreResult = append(scoreResult, val.Score)
memberResult = append(memberResult, val.Member.(string))
}
return
}
func ZRemCli(cli *RedisClienterInstance, key string, member ...string) error {
cmd := cli.Rc.ZRem(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), member)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoZRem error! key=%v, err=%v", key, cmd.Err())
return cmd.Err()
}
return nil
}
func ZRevRankCli(cli *RedisClienterInstance, key string, member string) (rank int64, err error) {
cmd := cli.Rc.ZRevRank(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), fmt.Sprintf("%v", member))
if cmd.Err() == nil {
return cmd.Val(), nil
}
if errors.Is(cmd.Err(), redis.Nil) {
return -1, nil
}
return 0, cmd.Err()
}
func ZScoreCli(cli *RedisClienterInstance, key string, member string) (score float64, err error) {
cmd := cli.Rc.ZScore(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), fmt.Sprintf("%v", member))
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoZRevRank error! key=%v, err=%v", key, cmd.Err())
return 0, cmd.Err()
}
return cmd.Val(), err
}
func ZCardCli(cli *RedisClienterInstance, key string) (cnt int64, err error) {
cmd := cli.Rc.ZCard(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoZRevRank error! key=%v, err=%v", key, cmd.Err())
return 0, cmd.Err()
}
return int64(cmd.Val()), err
}
func ZRankCli(cli *RedisClienterInstance, key string, member string) (rank int64, err error) {
cmd := cli.Rc.ZRank(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), fmt.Sprintf("%v", member))
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis ZRANK error! key=%v, err=%v", key, cmd.Err())
return 0, cmd.Err()
}
return cmd.Val(), err
}
// ======== zset ========
func LPushCli(cli *RedisClienterInstance, key string, val string) (err error) {
cmd := cli.Rc.LPush(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), val)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis LPushCli error! key=%v, err=%v", key, cmd.Err())
return cmd.Err()
}
return nil
}
func LPushExtCli(cli *RedisClienterInstance, key any, p any) (err error) {
bytes, err := proto.Marshal(p.(proto.Message))
if err != nil {
logs.Error("Redis DoLPush Protobuf Marshal error! key=%v, err=%v", key, err)
return err
}
cmd := cli.Rc.LPush(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), bytes)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoLPush error! key=%v, err=%v", key, cmd.Err())
return cmd.Err()
}
return nil
}
func RPushExtCli(cli *RedisClienterInstance, key any, p any) (err error) {
bytes, err := proto.Marshal(p.(proto.Message))
if err != nil {
logs.Error("Redis DoLPush Protobuf Marshal error! key=%v, err=%v", key, err)
return err
}
cmd := cli.Rc.RPush(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), bytes)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoLPush error! key=%v, err=%v", key, cmd.Err())
return cmd.Err()
}
return nil
}
func RPushCli(cli *RedisClienterInstance, key string, value string) (err error) {
cmd := cli.Rc.RPush(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), value)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoLPush error! key=%v, err=%v", key, cmd.Err())
return cmd.Err()
}
return nil
}
func LTrimCli(cli *RedisClienterInstance, key string, start, stop int64) error {
cmd := cli.Rc.LTrim(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), start, stop)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis LTrimCli error! key=%v, err=%v", key, cmd.Err())
return cmd.Err()
}
return nil
}
func LRangeCli(cli *RedisClienterInstance, key string, start, stop int64) (error, []string) {
cmd := cli.Rc.LRange(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), start, stop)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis LRangeCli error! key=%v, err=%v", key, cmd.Err())
return cmd.Err(), nil
}
return nil, cmd.Val()
}
func LRangeExtCli(cli *RedisClienterInstance, key any, slicePrt any, start, stop int64) (err error) {
cmd := cli.Rc.LRange(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key), start, stop)
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoLPush error! key=%v, err=%v", key, cmd.Err())
return cmd.Err()
}
results := reflect.ValueOf(slicePrt)
if results.Kind() == reflect.Ptr {
results = results.Elem()
}
for _, v := range cmd.Val() {
newItem := reflect.New(getStructType(slicePrt)).Interface()
err = proto.Unmarshal([]byte(v), newItem.(proto.Message))
if err != nil {
logs.Error("Redis DoLRangeExt Protobuf Unmarshal error! key=%v, err=%v", key, err)
return
}
results.Set(reflect.Append(results, reflect.ValueOf(newItem)))
}
return nil
}
func LLenCli(cli *RedisClienterInstance, key any) (int64, error) {
cmd := cli.Rc.LLen(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoLLen error! key=%v, err=%v", key, cmd.Err())
return 0, cmd.Err()
}
return cmd.Val(), nil
}
func RPopCli(cli *RedisClienterInstance, key any) (value string, err error) {
cmd := cli.Rc.RPop(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoRPop error! key=%v, err=%v", key, cmd.Err())
return "", cmd.Err()
}
return cmd.Val(), err
}
func LPopCli(cli *RedisClienterInstance, key any) (value string, err error) {
cmd := cli.Rc.LPop(cli.ctx(), fmt.Sprintf("%v:%v", cli.serverid, key))
if cmd.Err() != nil && !errors.Is(cmd.Err(), redis.Nil) {
logs.Error("Redis DoRPop error! key=%v, err=%v", key, cmd.Err())
return "", cmd.Err()
}
return cmd.Val(), err
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/MikeDDD/gu.git
git@gitee.com:MikeDDD/gu.git
MikeDDD
gu
gu
v0.0.126

搜索帮助

344bd9b3 5694891 D2dac590 5694891