首页 > 解决方案 > 使用 Redisson 在 Redis 中的信号量上配置 TTL

问题描述

我正在尝试使用 Redisson 获取分布式锁。我已将其范围缩小到一个,RSemaphore因为关键部分位于响应式流中,并且 Java 的单线程拥有和释放锁的合同在这里不起作用。我遇到的情况是 Redis 中的锁对象的 TTL 为 -1(永不过期)。该信号量用于锁定对象,因此我们的服务集群保持协调,并将创建数千个信号量而无需重入要求。

我一辈子都找不到在信号量对象上设置 TTL 的方法。我看到了许可证到期的选项,但没有看到信号量本身的选项。Zookeeper 在这个环境中不是一个选项,但我知道 ZK 有多种选项可以解决这个问题(ChildReapersCreateMode.CONTAINER)。这似乎是RSemaphoreAPI 的一个非常基本的要求。

标签: javaredissemaphorespring-webfluxredisson

解决方案


我升级了我的 Redisson 库版本以便能够访问该expire()方法。显然从 3.11.0 (?) 开始的版本具有继承自RExpirable.


推荐阅读