From 32e3d99d37903b93fba420e58dbd4a5a10ab1e6b Mon Sep 17 00:00:00 2001 From: liuchangshun <961347548@qq.com> Date: Sat, 2 Dec 2023 11:12:48 +0800 Subject: [PATCH] redis --- go.mod | 3 +++ go.sum | 6 ++++++ lxLock/redisLock.go | 41 +++++++++++++++++++++++++++++++++++++++++ lxrun/run.go | 6 ++++-- lxzap/lxzap.go | 6 +++--- 5 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 lxLock/redisLock.go diff --git a/go.mod b/go.mod index 1bb5fd9..6af0ced 100644 --- a/go.mod +++ b/go.mod @@ -5,13 +5,16 @@ go 1.19 require ( github.com/bwmarrin/snowflake v0.3.0 // indirect github.com/bytedance/sonic v1.9.1 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/gin-gonic/gin v1.9.1 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/gomodule/redigo v1.8.9 // indirect diff --git a/go.sum b/go.sum index d080db6..418ea60 100644 --- a/go.sum +++ b/go.sum @@ -3,11 +3,15 @@ github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/ github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= @@ -20,6 +24,8 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= diff --git a/lxLock/redisLock.go b/lxLock/redisLock.go new file mode 100644 index 0000000..ac9e911 --- /dev/null +++ b/lxLock/redisLock.go @@ -0,0 +1,41 @@ +package lxLock + +import ( + "context" + "git.listensoft.net/tool/lxutils/lxDb" + "github.com/go-redis/redis/v8" + "time" +) + +// RedisPool Redis连接池 +var RedisClient *redis.Client +var redisCtx = context.Background() + +func InitRedis(conf lxDb.RedisConfig) { + if conf.URL == "" { + RedisClient = nil + return + } + RedisClient = redis.NewClient(&redis.Options{ + Addr: conf.URL, // Redis 服务器地址 + Password: conf.Password, // Redis 密码 + DB: 0, // 默认数据库 + }) +} + +// GetRedisLock 尝试获取锁 +func GetRedisLock(lockKey string, expiration time.Duration) (bool, error) { + // 使用 SETNX 命令尝试获取锁 + result, err := RedisClient.SetNX(redisCtx, lockKey, "locked", expiration).Result() + if err != nil { + return false, err + } + return result, nil +} + +// DelRedisLock 释放锁 +func DelRedisLock(lockKey string) error { + // 使用 DEL 命令释放锁 + _, err := RedisClient.Del(redisCtx, lockKey).Result() + return err +} diff --git a/lxrun/run.go b/lxrun/run.go index 9687a90..cb07b6f 100644 --- a/lxrun/run.go +++ b/lxrun/run.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "git.listensoft.net/tool/lxutils/lxDb" + "git.listensoft.net/tool/lxutils/lxLock" "git.listensoft.net/tool/lxutils/lxlog" "git.listensoft.net/tool/lxutils/lxzap" "github.com/gin-gonic/gin" @@ -15,9 +16,9 @@ import ( "time" ) -func Run(env string, port string, fun func(), r func(router *gin.Engine), zapConfig lxzap.LogConfig, dbConf lxDb.DbConfig, redisConf lxDb.RedisConfig) { +func Run(env string, port string, fun func(), r func(router *gin.Engine), zapConfig lxzap.ZapLogConfig, dbConf lxDb.DbConfig, redisConf lxDb.RedisConfig) { _ = lxlog.InitLog() - err := lxzap.InitLogger(zapConfig) + err := lxzap.InitZapLogger(zapConfig) if err != nil { panic(err.Error()) } @@ -30,6 +31,7 @@ func Run(env string, port string, fun func(), r func(router *gin.Engine), zapCon } lxDb.InitDB(env, dbConf) lxDb.InitRedis(redisConf) + lxLock.InitRedis(redisConf) fun() r(app) srv := http.Server{ diff --git a/lxzap/lxzap.go b/lxzap/lxzap.go index 727c10b..1a99c7c 100644 --- a/lxzap/lxzap.go +++ b/lxzap/lxzap.go @@ -24,7 +24,7 @@ var Lg *zap.Logger // MaxSize = 2 // MaxAge = 1000 // MaxBackups = 1000 -type LogConfig struct { +type ZapLogConfig struct { Level string `json:"level"` Filename string `json:"filename"` MaxSize int `json:"maxsize"` @@ -32,8 +32,8 @@ type LogConfig struct { MaxBackups int `json:"max_backups"` } -// InitLogger 初始化Logger -func InitLogger(cfg LogConfig) (err error) { +// InitZapLogger 初始化Logger +func InitZapLogger(cfg ZapLogConfig) (err error) { writeSyncer := getLogWriter(cfg.Filename, cfg.MaxSize, cfg.MaxBackups, cfg.MaxAge) encoder := getEncoder() var l = new(zapcore.Level)