我使用MSETNX(http://redis.io/commands/msetnx)作为锁定系统,只有在没有锁定的情况下才锁定所有密钥。
如果持有锁的机器死亡,该锁将被锁定 - 这是一个问题。
我的理想答案是所有键在默认情况下都会在15秒内失效,因此即使机器死机,持有的锁也会在短时间内自动重置。这样我就不必在我设置的每个键上调用过期。
这有可能吗?
答案 0 :(得分:2)
Redis没有内置的方法来执行MSETNX并以原子方式将所有键过期。您也不能为密钥设置默认的到期管。
您可以考虑: 1.使用包含多个'SET键值EX 15 NX'的WATCH / MULTI / EXEC块,或 2.使用Lua服务器端脚本执行此操作。
答案 1 :(得分:2)
要构建高可用的可靠锁,请查看此文档:http://redis.io/topics/distlock
该算法仍处于测试阶段,但在几个会话中进行了压力测试,并且可能比单实例方法更可靠。
有几种语言的参考实现(在文档中链接)。