Redis服务器升级过程中无法获取Redis锁,进程卡住

问题描述

我正在测试当我从 Redis 集群一次重启一个 Redis 服务器时我的 JAVA 应用程序的行为(连接到 Redis 以实现锁定机制)。我正在使用 Redisson 库连接到 Redis 集群。集群中有3台服务器,都有Sentinels,一台为主服务器,另外两台为从服务器。

当应用程序运行时,它会尝试获取 RLock,执行一些任务并释放锁。每小时重复该过程。这在正常情况下运行良好。

但是当我一次重启一个 Redis 服务器时,我的应用程序中的进程卡在它试图获取锁的那一点。

isLockFree = redisLock.tryLock(tryAcquireRLockWaitTime,TimeUnit.SECONDS);

我等了 6 个多小时,但过程再也没有回来。我还检查了 Redis 服务器中的锁定密钥,但找不到密钥。 此外,在重新启动期间,我尝试从 Redis 读取一些值,并且工作正常。

我什至尝试了 Redisson 的 tryAsyncLock(tryAcquireRLockWaitTime,TimeUnit.SECONDS),但同样的问题也发生了。

但是如果我在所有 Redis 服务器重新启动后重新启动我的 JAVA 应用程序,锁定机制将再次正常运行。

所以我的问题是: 如果从集群中,Redis 服务器一次重启一个,那么为什么进程无法获得锁? 重新启动 Redis 集群后,我是否需要每次都重新启动我的应用程序?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)