micro-account/pkg/cache/common.go
2025-02-20 16:18:23 +08:00

93 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cache
import (
"errors"
"fmt"
"github.com/fonchain_enterprise/utils/zap_log"
"strconv"
"time"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"github.com/go-redis/redis"
)
// RedisClient Redis缓存客户端单例
var (
RedisClient *redis.Client
)
var deleteScript = `
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
`
type RedisConfig struct {
RedisDB string
RedisAddr string
RedisPw string
RedisDbName string
}
//LoadRedis 在中间件中初始化redis链接
func LoadRedis(configEnv RedisConfig) {
db, _ := strconv.ParseUint(configEnv.RedisDbName, 10, 64)
client := redis.NewClient(&redis.Options{
Addr: configEnv.RedisAddr,
Password: configEnv.RedisPw,
DB: int(db),
})
_, err := client.Ping().Result()
if err != nil {
logger.Info(err)
panic(err)
}
RedisClient = client
}
//LockConcurrency 锁死并发
func LockConcurrency(key string, value string, ms time.Duration) (bool, error) {
fmt.Println(ms)
setNx := RedisClient.SetNX(key, value, ms)
result, err := setNx.Result()
if err != nil {
zap_log.Error(fmt.Sprintf("锁死加解密的时候redis 失效,err%s,%v", key, err))
//panic(err)
return false, err
}
if result {
zap_log.Info(fmt.Sprintf("新增key存在设置成功%s", key))
} else {
zap_log.Info(fmt.Sprintf("新增key已存在设置失败%s", key))
}
zap_log.Info(fmt.Sprintf("日志%v%v%s", result, err, key))
if setNx.Val() == false {
return false, errors.New("已经被人锁定")
}
return true, nil
}
func Release(key, value string) error {
result, err := RedisClient.Eval(deleteScript, []string{key}, value).Result()
if err != nil {
return err
}
// 判断Lua脚本执行的结果
if result == int64(1) {
fmt.Println("Lock released.")
return nil
} else {
fmt.Println("Failed to release lock, or lock was not held by this client.")
return errors.New("释放失败也可能是超时自动解锁了,请您刷新")
}
}