This commit is contained in:
2025-06-25 00:01:48 +08:00
parent 3d53c9ec59
commit 53106465ed
30 changed files with 2108 additions and 6 deletions

View File

@@ -0,0 +1,57 @@
package redis
import (
commonConfig "common/config"
"context"
"crypto/tls"
"errors"
"fmt"
"github.com/redis/go-redis/v9"
"time"
)
var (
redisClient *redis.Client
redisNotInitErr = errors.New("redis is not initialized.")
keyNotExist = errors.New("key does not exist")
Nil = redis.Nil
)
func Init(cfg *commonConfig.RedisConfig) error {
url := fmt.Sprintf("%s:%d", cfg.Host, cfg.Port)
if cfg.Tls {
redisClient = redis.NewClient(&redis.Options{
Addr: url,
Password: cfg.Auth,
DB: cfg.Db,
DialTimeout: 20 * time.Second,
Username: cfg.UserName,
TLSConfig: &tls.Config{},
})
} else {
redisClient = redis.NewClient(&redis.Options{
Addr: url,
Password: cfg.Auth,
DB: cfg.Db,
DialTimeout: 20 * time.Second,
})
}
ret := redisClient.Ping(context.Background())
//p := redisClient.Pipeline()
//l := p.HGetAll(xxx, xxx)
//s := p.Get(xxx, xx)
//p.Exec(xxx)
return ret.Err()
}
func Close() error {
if redisClient != nil {
return redisClient.Close()
}
return nil
}
func GetRedisClient() *redis.Client {
return redisClient
}

View File

@@ -0,0 +1,37 @@
package redis
import (
"common/log"
"context"
"errors"
"time"
)
var ReleaseLockExpire = errors.New("release redis lock expire key")
func Acquire(ctx context.Context, key string, tag string, expiration time.Duration) (bool, error) {
success, err := redisClient.SetNX(ctx, key, tag, expiration).Result()
return success, err
}
func Release(ctx context.Context, key string, tag string) error {
script := `
if redis.call("GET", KEYS[1]) == ARGV[1] then
return redis.call("DEL", KEYS[1])
else
return 0
end`
// 执行 Lua 脚本
result, err := redisClient.Eval(ctx, script, []string{key}, tag).Result()
if err != nil {
return err
}
// 检查返回值
if result == int64(0) {
log.Errorf("release redis lock expire key :%v", key)
return ReleaseLockExpire
}
return nil
}