【发布时间】:2021-06-01 07:58:00
【问题描述】:
所以我想要一个锁定系统,如果锁存在/获取,其他进程将等待(设置超时),直到锁空闲并且等待进程之一能够获取锁。
现在在 Redis 中,这个命令几乎可以满足我的需求:
SET lock_key "locked" EX 10 NX
但如果密钥存在,我会得到nil。
如何让它等待(使用 lua?)直到密钥不再存在?
更新:
处理 LUA 解决方案(伪代码):
x=llen free
y=llen lock
if x+y =0 ; lpush free a
brpoplpush free lock 30
expire lock 600
我正在检查列表是否为空,所以我向free 添加了一个值 - 这是锁定的一种初始化。
brpoplpush 是实际的锁定,如果锁定则等待。
expire 用于 10 分钟内未释放锁(无论出于何种原因)。
会喜欢你的想法
【问题讨论】: