是否有某种带有空闲 TTL 的锁/信号量



我有以下情况。

为了防止并发资源访问,我们使用RPermitExpirableSemaphore作为锁。 从Expirable我希望 Redis 中的"锁定键"会在一些 TTL 后被删除。但不幸的是,事实并非如此。

例如:

  • A尝试获取锁X
  • A使用 TTL1m创建(以前不存在(锁X
  • A获取锁X
  • B尝试获取锁X
  • B等待A释放锁X
  • B获取锁X
  • 1分钟过去了
  • Redis 删除锁(键(X

如果有新的尝试来获取锁X,上面的场景将从头开始。

Redisson 中是否有某种锁定/信号量提供这种行为?

附言我无法手动删除信号量,因为如果有其他客户端等待释放锁定,它们最终会出现信号量不存在的异常(当然,因为它已被另一个客户端删除(。结果,我们有泄漏的密钥(将来不会使用,因为访问的资源是临时的(。

此问题已在版本 3.12.0 中修复。
问题:https://github.com/redisson/redisson/issues/2444。
提交:https://github.com/redisson/redisson/commit/1954b8e6fbc262c0a75509ec75df98af73202fd4

最新更新