0
redis锁重入bug,可重入锁往往会有多次释放锁,第一次释放锁就会把锁释放
-
Acquire Acquire Release // 这行会吧rediskey删除,导致其他人可以抢占到锁 在这里的代码将没有锁保护 Release
redis锁重入bug,可重入锁往往会有多次释放锁,第一次释放锁就会把锁释放
Acquire
Acquire
Release // 这行会吧rediskey删除,导致其他人可以抢占到锁
在这里的代码将没有锁保护
Release
你建议怎么修复呢?
多个进程或协程调用多次锁,应该传入标识ID,我觉得可以支持参数传入,释放时以对应参数释放呢?在同一个key上,那必然引起此问题
redis lua部分不需要支持重入锁,只需要在RedisLock结构体里定义一个当前重入次数的变量,然后请求锁时只增加这个变量的值,每次释放锁减少这个变量的值,当减少到0时删除redis key
我不认为应该支持重入,可以像go的mutex那样禁止重入。
之前原来的代码在lua部分不是支持重入的吗?如果不支持重入这个lua就改成返回false if redis.call("GET", KEYS[1]) == ARGV[1] then redis.call("SET", KEYS[1], ARGV[1], "PX", ARGV[2]) return "OK"
这里还有个锁超时要考虑
merged.
我觉得考虑合理,感谢!