在Redis中使所有密钥默认过期

时间:2014-07-16 16:15:14

标签: redis locks content-expiration

我使用MSETNX(http://redis.io/commands/msetnx)作为锁定系统,只有在没有锁定的情况下才锁定所有密钥。

如果持有锁的机器死亡,该锁将被锁定 - 这是一个问题。

我的理想答案是所有键在默认情况下都会在15秒内失效,因此即使机器死机,持有的锁也会在短时间内自动重置。这样我就不必在我设置的每个键上调用过期。

这有可能吗?

2 个答案:

答案 0 :(得分:2)

Redis没有内置的方法来执行MSETNX并以原子方式将所有键过期。您也不能为密钥设置默认的到期管。

您可以考虑: 1.使用包含多个'SET键值EX 15 NX'的WATCH / MULTI / EXEC块,或 2.使用Lua服务器端脚本执行此操作。

答案 1 :(得分:2)

要构建高可用的可靠锁,请查看此文档:http://redis.io/topics/distlock

该算法仍处于测试阶段,但在几个会话中进行了压力测试,并且可能比单实例方法更可靠。

有几种语言的参考实现(在文档中链接)。