java 从CLI解锁Redis锁

mv1qrgav  于 12个月前  发布在  Java
关注(0)|答案(2)|浏览(69)

我有一个Java应用程序,它在本地网络上有多个示例。它使用Redis Redlock来管理共享数据库的完整性。这里的问题是这个java应用程序仍然非常不稳定,所以它崩溃了很多次。当一个示例崩溃时,它在崩溃时持有锁,所有其他示例都会卡住。我的问题是,当一个持有锁的Java应用程序示例崩溃时,我可以从Redis CLI释放锁吗?

vuktfyat

vuktfyat1#

通过CLI,我可以用命令DEL <lock name>从Redis服务器上移除锁。这样做的时候,等待的线程就可以获取锁。我不知道这条路对不对。但这很有效。

kr98yfug

kr98yfug2#

del <lock name>是正确的,也是释放锁的好方法。
我只是想解释为什么上面的工作,是一个快速和简单的方法来释放一个陈旧的锁!公认的答案表明这是一个“黑客”或什么的,所以我担心应用它;发现完全没问题
看起来redis只是在锁的名称下存储了一个唯一的ID密钥。因此,如果您获取一个名为foo的锁,您可以看到锁的值:

get foo

你可以在这里看到一个ID,例如:aeec8bc0598311ffacfd0242ac110005
因此,任何其他试图获取锁的人,redis只需将他们的ID与存储在foo中的值进行比较并拒绝他们。当锁被释放时,它被删除。
如果你手动删除锁(del foo),那么它只是手动做了Redis在后台自然释放锁时会做的事情。

相关问题