我试图使用redis获取分布式锁。谷歌搜索后,我找到了一个解决方案 https://github.com/jeffomatic/redis-exp-lock-js/blob/master/js/lib/redis_lua.js
但这个解决方案的问题是: 如果应用程序崩溃。在超时之前无法恢复锁定。我想要的是,在连接关闭时自动使密钥失效。 redis中是否有任何命令/过期设置?对于关闭连接关键。
答案 0 :(得分:0)
不,redis不会为你做这件事(你只能在客户端这样做)
为缓解此死锁问题,您可以做的是存储上次获取的时间戳,并使用该时间戳来确定锁是否仍然有效或是否存在死锁。
如果存储在其中的值设置得太久(例如,current_time - lock_time> timeout),则获取锁定的客户端将忽略它。
注意:这需要客户端的时钟同步。
编辑:
如果LUA是您的选项,那么您不需要客户端具有同步时钟