Commit b3c9207ec01332536bb1fd53f4ff1929891c07ce

Authored by 王家文
1 parent e9b50cae
Exists in master and in 1 other branch dev-wjw

feat✨:redis分布式锁增加重试次数

service/roomrank/consts.go
@@ -9,5 +9,7 @@ const ( @@ -9,5 +9,7 @@ const (
9 RoomCloseSecond = 180 // 房间关闭时间 9 RoomCloseSecond = 180 // 房间关闭时间
10 RoomResetRobotSecond = 300 // 改变机器人分数并重新排序的间隔时间 10 RoomResetRobotSecond = 300 // 改变机器人分数并重新排序的间隔时间
11 11
12 - RoomLockMillisecond = 3000 * time.Millisecond // 分布式锁时长 3秒 12 + RoomLockMillisecond = 5000 * time.Millisecond // 分布式锁时长 5秒
  13 + RoomLockLinearBackoff = 100 * time.Millisecond
  14 + RoomLockMaxCount = 20
13 ) 15 )
service/roomrank/handle.go
@@ -55,7 +55,8 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan @@ -55,7 +55,8 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
55 55
56 // 采用分布式锁 56 // 采用分布式锁
57 lockKey := getLockKey(gameId, config.Id) 57 lockKey := getLockKey(gameId, config.Id)
58 - lock := zredislock.Obtain(lockKey, RoomLockMillisecond, nil) 58 + opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount)
  59 + lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt)
59 if lock.Err != nil { 60 if lock.Err != nil {
60 code = code_msg.RECODE_CAOZUOPINFAN_ERROR 61 code = code_msg.RECODE_CAOZUOPINFAN_ERROR
61 return 62 return
@@ -116,7 +117,8 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r @@ -116,7 +117,8 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r
116 117
117 // 采用分布式锁 118 // 采用分布式锁
118 lockKey := getLockKey(gameId, config.Id) 119 lockKey := getLockKey(gameId, config.Id)
119 - lock := zredislock.Obtain(lockKey, RoomLockMillisecond, nil) 120 + opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount)
  121 + lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt)
120 if lock.Err != nil { 122 if lock.Err != nil {
121 code = code_msg.RECODE_CAOZUOPINFAN_ERROR 123 code = code_msg.RECODE_CAOZUOPINFAN_ERROR
122 return 124 return
@@ -173,7 +175,8 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs @@ -173,7 +175,8 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
173 175
174 // 采用分布式锁 176 // 采用分布式锁
175 lockKey := getLockKey(gameId, config.Id) 177 lockKey := getLockKey(gameId, config.Id)
176 - lock := zredislock.Obtain(lockKey, RoomLockMillisecond, nil) 178 + opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount)
  179 + lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt)
177 if lock.Err != nil { 180 if lock.Err != nil {
178 code = code_msg.RECODE_CAOZUOPINFAN_ERROR 181 code = code_msg.RECODE_CAOZUOPINFAN_ERROR
179 return 182 return
service/roomrank/room.go
@@ -235,6 +235,7 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig) { @@ -235,6 +235,7 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig) {
235 if secNow < room.ResetRobotTime+RoomResetRobotSecond { 235 if secNow < room.ResetRobotTime+RoomResetRobotSecond {
236 return 236 return
237 } 237 }
  238 + room.ResetRobotTime = secNow
238 // 机器人即时算分 239 // 机器人即时算分
239 for i := 0; i < len(room.Details.Players); i++ { 240 for i := 0; i < len(room.Details.Players); i++ {
240 roomPlayer := room.Details.Players[i] 241 roomPlayer := room.Details.Players[i]
util/zredislock/external.go
@@ -54,3 +54,10 @@ func (l *Lock) Release() { @@ -54,3 +54,10 @@ func (l *Lock) Release() {
54 fmt.Println(err) 54 fmt.Println(err)
55 } 55 }
56 } 56 }
  57 +
  58 +func GetOptionLimitRetry(duration time.Duration, max int) *redislock.Options {
  59 + backoff := redislock.LimitRetry(redislock.LinearBackoff(duration), max)
  60 + return &redislock.Options{
  61 + RetryStrategy: backoff,
  62 + }
  63 +}