学习小记 -- Redis的RedLock算法

本文详细解析了Redis RedLock算法,介绍了其在分布式环境中的工作原理,如何解决单节点锁的问题,以及关键要求如超半数节点锁定、TTL设置和重试策略。通过实例了解如何确保在Redis集群中分布式锁的可靠性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RedLock算法是Redis集群中用的分布式锁算法,在讲之前先简单回顾一下在单Redis节点中分布式锁的使用原理:

我们都知到,用Redis可以实现分布式锁,在单Redis节点中,分布式锁通常使用

SET lock_key NX PX 5000

  • NX 代表只在键不存在时,才对键进行设置操作。
  • PX 5000 设置键的过期时间为5000毫秒。

但是会有问题,如果Client向Master获取锁之后同步给Slave,如果Client获取锁成功之后Master节点挂掉,并且未将该锁同步到Slave,之后在Sentinel的帮助下Slave升级为Master但是并没有之前未同步的锁的信息,此时如果有新的Client要在新Master获取锁,那么将可能出现两个Client持有同一把锁的问题。所以为了解决这个问题,可以设置一个唯一值random_value,用来校验自己的锁只能自己释放:

SET lock_key random_value NX PX 5000

  • random_value 是客户端生成的唯一的字符串。 

Redlock算法原理,是在分布式环境中,假如有N个独立的节点,在每个节点上使用的方式跟单节点一样。

RedLock算法要求:

  1. 客户端获取一个锁,需要向超过半数的节点获取锁,只有在了超过半数节点获取锁成功后,才算获取成功,这个过程是有时间损耗的。
  2. 过期时间(TTL) > 业务执行时间 + 加锁时间 + 始终漂移时间 
  3. 加锁失败后,要有重试次数限制。
  4. 若master挂了,master要延迟启动,可延迟TTL时间。

参考:https://zhuanlan.zhihu.com/p/101216704

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值