Redisson(4)分布式锁之RedLock

本文介绍了Redis实现分布式锁存在的问题,如主节点故障导致锁丢失、锁超时引发的安全问题,并探讨了官方文档提供的解决方案。接着,详细讨论了Redisson的RedLock策略,如何通过管理多个锁来提高可用性,以及其tryLock方法中的核心算法,确保在特定时间内获取锁的成功率,避免并发控制中的安全性问题。
摘要由CSDN通过智能技术生成

Redis实现分布式锁的官方文档介绍

Redis的官方文档对用Redis分布式锁的难点以及解决方案的考虑做了一些说明,具体内容参见:https://redis.io/topics/distlock,译文参考:http://ifeve.com/redis-lock/

场景一:

保存锁的Redis的master节点挂了。这里不是说有slave就没问题了,因为Redis的数据复制功能(replication)是异步的,存在这样的可能,线程1获取到锁了,该锁在从master复制到slave之前,master挂掉了,然后slave提升为了master,这个时候线程2从新的master节点上是可以获取到锁的,之前的锁丢失了,这样会导致安全问题。

场景二:

对于锁“lock123”(名字随便取的),线程一获取到锁,设置过期时间为30s,但是真正业务执行时间超过了30s,比如说40s。在32s的时候线程二尝试获取锁,并且成功了,因为这个锁的超时时间是30s,在32s的时候,该锁已经失效了。当40s的时候,线程一业务执行完毕,这个时候尝试去释放锁,即删除锁,很不幸,这个时候线程二锁持有的锁会被线程一误删掉,因为它们的key相同。

解决方案:

set操作的时候,设置一个random value作为该key的value,在解锁的时候&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值