liuchangshun 5 months ago
parent
commit
32e3d99d37
5 changed files with 57 additions and 5 deletions
  1. 3 0
      go.mod
  2. 6 0
      go.sum
  3. 41 0
      lxLock/redisLock.go
  4. 4 2
      lxrun/run.go
  5. 3 3
      lxzap/lxzap.go

+ 3 - 0
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

+ 6 - 0
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=

+ 41 - 0
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
+}

+ 4 - 2
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{

+ 3 - 3
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)