是否有闲置TTL的某种锁/信号灯

时间:2019-11-27 15:19:46

标签: java redis redisson

我有以下情况。

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

例如:

  • A 尝试获取锁 X
  • A 创建(因为以前不存在)用TTL 1m
  • 锁定 X
  • A 获得锁 X
  • B 尝试获取锁 X
  • B 等待 A 释放锁 X
  • B 获得锁 X
  • 1分钟过去了
  • Redis删除锁(键) X

如果有新的尝试获取锁 X ,上述情况将从头开始。

Redisson中是否存在某种提供这种行为的Lock / Semaphore?

P.S。我无法手动删除信号量,因为如果还有其他客户端正在等待释放锁,它们将以信号量不存在(当然,因为它已被另一个客户端删除)的异常结束。结果就是我们泄漏了密钥(由于访问的资源是临时性的,因此以后将不再使用)。

1 个答案:

答案 0 :(得分:1)