From 6c9e8b125a9b38d15416a1cbc77d456f2e2f79ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=8C?= <259278618@qq.com> Date: Fri, 26 Dec 2025 17:35:52 +0800 Subject: [PATCH] =?UTF-8?q?common/redis=E5=A2=9E=E5=8A=A0Lock=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- redis/redis.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/redis/redis.go b/redis/redis.go index 09c60c2..3e8a5b0 100644 --- a/redis/redis.go +++ b/redis/redis.go @@ -33,11 +33,11 @@ func GetRedisClient() *gredis.Redis { } // Lock 分布式锁 -func Lock(ctx context.Context, key string, expireSeconds int64, fn func(ctx context.Context) error) error { +func Lock(ctx context.Context, key string, expireSeconds int64, fn func(ctx context.Context) error) (success bool, err error) { limit := 3 LOOP: if limit < 0 { - return nil + return } limit-- if val, err := RedisClient.Set(ctx, key, true, gredis.SetOption{ @@ -46,8 +46,7 @@ LOOP: }, NX: true, }); err != nil { - glog.Errorf(ctx, "RedisClient.Lock error: %v", err) - return nil + return } else { if val.Bool() { defer func(RedisClient *gredis.Redis, ctx context.Context, key string) { @@ -55,7 +54,10 @@ LOOP: glog.Errorf(ctx, "RedisClient.Del error: %v", err) } }(RedisClient, ctx, key) - return fn(ctx) + if err = fn(ctx); err != nil { + return false, err + } + return true, nil } else { time.Sleep(time.Second) goto LOOP