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 9 RoomCloseSecond = 180 // 房间关闭时间
10 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 55  
56 56 // 采用分布式锁
57 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 60 if lock.Err != nil {
60 61 code = code_msg.RECODE_CAOZUOPINFAN_ERROR
61 62 return
... ... @@ -116,7 +117,8 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r
116 117  
117 118 // 采用分布式锁
118 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 122 if lock.Err != nil {
121 123 code = code_msg.RECODE_CAOZUOPINFAN_ERROR
122 124 return
... ... @@ -173,7 +175,8 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
173 175  
174 176 // 采用分布式锁
175 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 180 if lock.Err != nil {
178 181 code = code_msg.RECODE_CAOZUOPINFAN_ERROR
179 182 return
... ...
service/roomrank/room.go
... ... @@ -235,6 +235,7 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig) {
235 235 if secNow < room.ResetRobotTime+RoomResetRobotSecond {
236 236 return
237 237 }
  238 + room.ResetRobotTime = secNow
238 239 // 机器人即时算分
239 240 for i := 0; i < len(room.Details.Players); i++ {
240 241 roomPlayer := room.Details.Players[i]
... ...
util/zredislock/external.go
... ... @@ -54,3 +54,10 @@ func (l *Lock) Release() {
54 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 +}
... ...