我有以下情况。
为了防止并发资源访问,我们使用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