我在http://redis.io/topics/distlock阅读了有关Redis的分布式锁的帖子。有一个lua脚本来描述如何“解锁”。
arrInArr
我认为这种模式存在竞争条件:
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
SET key randomstring1 NX PX 3000
if redis.call("get",KEYS[1]) == ARGV[1] then
答案 0 :(得分:2)
不,这里没有竞争条件。 LUA脚本以原子方式执行。这意味着在LUA脚本完成它们之前,不会处理来自其他连接(客户端)的任何命令(即使Redis内部cron实际处理过期的项目)。