This commit is contained in:
liuchangshun 2023-12-02 11:12:48 +08:00
parent a1b10987f0
commit 32e3d99d37
5 changed files with 57 additions and 5 deletions

3
go.mod
View File

@ -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
go.sum
View File

@ -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
lxLock/redisLock.go Normal file
View File

@ -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
}

View File

@ -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{

View File

@ -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)