分布式锁-红锁

本文深入探讨Redission在单台Redis及集群环境下的分布式锁实现原理。讲解了如何通过set命令确保锁的唯一性,避免误解锁风险,以及锁的自动延期机制。同时,文章详细解析了红锁算法,包括在多数节点上获取锁的策略,锁的有效期调整,以及锁获取失败后的快速释放机制。

Redission

单台redis支持

set key value nx px time value
必须唯一避免误解锁,设置与失效时间不能分割,删除锁判断是否解锁人就是加锁人,锁失效时间应自动延长有效期

红锁(必须redis节点相互独立)

1、获取当前时间
2、向多个节点获取锁,获取锁有一个极小的超时时间。获取锁失败后,立即尝试下一个redis节点获取锁
3、是否获得锁成功,首先判断是否从大多数的节点中获取到了锁,(>=N/2+1)比如十台机器,六台之前获得到了锁。
之后判读总共消耗的时间是否小于生效时间,如果大于生效时间获取锁失败
4、获取成功锁的有效期,将重新计算。用有效期-第三步得出的总共消耗时间
5、如果客户端获取锁失败,立即向所有redis节点进行锁释放

分布式系统中,使用分布式锁来控制并发访问是一种常见的做法。然而,当涉及到领取包这样的场景时,分布式锁可能会导致延迟领取的问题。以下是一些可能的原因和解决方法: 1. **竞争**: 在高并发情况下,多个用户同时尝试获取,这可能导致部分用户需要等待释放才能继续操作。这种情况下,可以采用更细粒度的或者优化的获取与释放逻辑。 2. **超时**: 如果的获取设置了超时时间,那么在达到超时时间后还未获取到的用户将会失败。可以通过调整超时时间和重试机制来缓解这个问题。 3. **系统性能**: 分布式锁的实现依赖于底层系统(如数据库或缓存),如果这些系统的性能瓶颈导致操作变慢,也会影响领取速度。优化底层系统性能或者选择更高效的服务可以改善这一点。 4. **网络延迟**: 分布式系统中不同节点之间的通信延迟也可能导致操作的延迟。确保网络环境的稳定性和低延迟是必要的。 5. **粒度**: 如果的粒度太粗,会限制系统的并发度;如果的粒度太细,又可能导致资源竞争加剧。合理设计的粒度对于提升性能至关重要。 6. **策略**: 选择合适的策略也很重要,比如乐观、悲观等,根据业务场景选择最合适的策略可以减少不必要的等待时间。 7. **异步处理**: 对于非关键性的操作,可以考虑使用异步处理的方式,减少同步等待的时间。 8. **负载均衡**: 通过合理的负载均衡策略分散请求压力,避免单个节点成为瓶颈。 9. **监控与调优**: 持续监控系统性能指标,根据实际情况调整系统配置和代码实现。 10. **限流**: 在前端进行适当的限流措施,避免瞬间流量过大导致的系统不稳定。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值