是否有某种带有空闲 TTL 的锁/信号量
Is there some kind of lock / semaphore with idle TTL
我有以下情况。
为了防止并发资源访问,我们使用 RPermitExpirableSemaphore
作为锁。
来自 Expirable
我希望 Redis 中的“锁定密钥”会在一些 TTL 后被删除。但不幸的是它不是。
例如:
- A 尝试获取锁 X
- A 使用 TTL 1m[=51 创建(之前不存在的)锁 X =]
- A 获取锁 X
- B 尝试获取锁 X
- B 等待 A 释放锁 X
- B 获取锁 X
- 1 分钟过去了
- Redis删除锁(key)X
并且如果有新的尝试获取锁 X,上述场景将从头开始。
Redisson 中是否有某种锁/信号量提供这种行为?
P.S。我不能手动删除信号量,因为如果有其他客户端在等待释放锁,它们最终会出现异常信号量不存在(当然,因为它已被另一个客户端删除)。结果我们有泄漏的密钥(将来不会使用,因为访问的资源是暂时的)。
我有以下情况。
为了防止并发资源访问,我们使用 RPermitExpirableSemaphore
作为锁。
来自 Expirable
我希望 Redis 中的“锁定密钥”会在一些 TTL 后被删除。但不幸的是它不是。
例如:
- A 尝试获取锁 X
- A 使用 TTL 1m[=51 创建(之前不存在的)锁 X =]
- A 获取锁 X
- B 尝试获取锁 X
- B 等待 A 释放锁 X
- B 获取锁 X
- 1 分钟过去了
- Redis删除锁(key)X
并且如果有新的尝试获取锁 X,上述场景将从头开始。
Redisson 中是否有某种锁/信号量提供这种行为?
P.S。我不能手动删除信号量,因为如果有其他客户端在等待释放锁,它们最终会出现异常信号量不存在(当然,因为它已被另一个客户端删除)。结果我们有泄漏的密钥(将来不会使用,因为访问的资源是暂时的)。