首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分布式锁简单系统

分布式锁简单系统
EN

Stack Overflow用户
提问于 2021-03-02 18:26:32
回答 1查看 351关注 0票数 0

因此,我希望有一个锁定系统,如果锁存在/获得,其他进程将等待(设置超时),直到锁空闲,其中一个等待进程将能够获得锁。

在Redis中,这个命令提供了我想要的内容:

代码语言:javascript
复制
SET lock_key "locked" EX 10 NX

但如果密钥存在,我将得到nil。我如何让它等待(使用lua?)直到钥匙不存在了?

更新:

研究LUA解决方案(伪代码):

代码语言:javascript
复制
x=llen free 
y=llen lock 
if x+y =0 ; lpush free a
brpoplpush free lock 30
expire lock 600

我正在检查列表是否为空,因此我向free添加了一个值--这是锁定的一种init。brpoplpush是实际的锁定,如果锁定,则等待。expire用于在10分钟内没有释放锁(无论出于什么原因)。

会喜欢你的想法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 14:13:12

代码语言:javascript
复制
echo -e "
eval \"if redis.call('llen', KEYS[1]) + redis.call('llen', ARGV[1]) == 0 then 
       redis.call('lpush', KEYS[1], 'a') end\" 1  free lock
brpoplpush free lock 30
expire lock 600" | redis-cli -h $REDIS

它是pipelineeval的混合物。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66445073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档