0

我试图使用 redis 获得分布式锁。谷歌搜索后,我找到了一种解决方案 https://github.com/jeffomatic/redis-exp-lock-js/blob/master/js/lib/redis_lua.js

但是这个解决方案的问题是:如果应用程序崩溃了。没有办法在超时之前恢复锁。我想要的是,在连接关闭时自动使密钥过期。redis中是否有任何命令/过期设置?用于在连接关闭时使密钥到期。

4

1 回答 1

0

不,redis 不会为您执行此操作(您只能在客户端执行此操作)

你可以做些什么来缓解这个死锁问题是存储最后一次获取的时间戳,并使用它来确定一个锁是否仍然有效或者它是否是一个死锁。

如果存储在其中的值设置得太早(例如 current_time - lock_time > timeout),获取锁的客户端将忽略它。

注意:这需要同步客户端的时钟。

编辑:

如果 LUA 是您的选择,那么您不需要客户端具有同步时钟

于 2013-06-14T14:32:43.630 回答