我正在尝试使用 Redisson 获取分布式锁。我已将其缩小到一个RSemaphore
,因为关键部分位于响应式流中,并且 Java 的单个线程拥有和释放锁的合约在这里不起作用。我遇到的情况是 Redis 中的锁定对象的 TTL 为 -1(永不过期(。此信号量用于锁定对象,以便我们的服务集群保持协调,并将创建数千个信号量,而无需重入。
我一生都找不到在信号量对象上设置 TTL 的方法。我看到许可证到期的选项,但没有看到信号量本身的选项。Zookeeper 在这种环境中不是一个选项,但我知道 ZK 有多种选择来解决这个问题(ChildReapers
和CreateMode.CONTAINER
(。这似乎是RSemaphore
API 的一个非常基本的要求。
我升级了我的Redisson库版本,以便能够访问expire()
方法。显然,从 3.11.0 (?( 开始的版本具有从RExpirable
继承的方法。