我正在尝试使用redis获取分布式锁。在谷歌搜索之后,我找到了一个解决方案https://github.com/jeffomatic/redis-exp-lock-js/blob/master/js/lib/redis_lua.js
但是这个解决方案的问题是:如果应用程序崩溃。在超时之前,没有办法恢复锁。我想要的是,在连接关闭时自动过期密钥。在redis中有什么命令/过期设置吗?用于在连接关闭时使密钥过期。
发布于 2013-06-14 22:32:44
不,redis不能为你做到这一点(你只能在客户端做到这一点)
要缓解这个死锁问题,您可以存储上一次获取的时间戳,并使用该时间戳来确定锁是否仍然有效或是否为死锁。
如果存储在锁中的值设置得太早,获取锁的客户端将忽略它(例如,current_time - lock_time > timeout)。
注意:这需要同步客户端的时钟。
编辑:
如果LUA是您的一个选项,那么您不需要客户端具有同步时钟
https://stackoverflow.com/questions/17079723
复制相似问题