Redis分布式锁

本文介绍了Redis中利用setnx创建分布式锁及其缺点,包括单机模式下可能的问题。接着探讨了RedLock分布式锁的实现流程,强调了获取多数master节点锁的重要性,并指出在锁失败时的清理策略。最后,文章比较了Redis与Zookeeper在分布式锁上的差异。
摘要由CSDN通过智能技术生成

setnx创建锁


使用setnx创建key,设置释放时间,这样就是一个锁了。

SET my_resource random_value NX PX 10000
  • NX:不存在才添加
  • PX:超过时间自动删除。

执行成功即获得了锁
释放锁就是删除key

释放锁通常使用lua脚本来删除key:

-- 删除锁的时候,找到 key 对应的 value,跟自己传过去的 value 做比较,如果是一样的才删除。
if redis.call("get",KEYS[1]) == ARGV[1] then
    return redis.call("del",KEYS[1])
else
    return 0
end

为什么使用random_value:使用随机值保证唯一,假设第一个锁正常释放,另一个客户端获得了此锁,如果不验证value就直接删除,会有问题。所以采用随机值+lua脚本验证删除释放锁。
缺点:只能用于单机,但是单机故障会有问题。集群会出现:如果某个master挂了,但是key还没同步到slave,此时slave成为master,那么因为slave没有此key,那么其他客户端就会获得锁。

RedLock分布式锁


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值