如何解决分布式锁应用在Redis主从+哨兵模式的架构上的数据丢失问题呢?

提问者:帅平 问题分类:面试刷题
如何解决分布式锁应用在Redis主从+哨兵模式的架构上的数据丢失问题呢?
1 个回答
有你我就幸福
有你我就幸福
使用redis的红锁(Redlock),但是红锁不再依赖从库,而是依赖主库,这里的主库需要部署多个实例,整个红锁的使用流程如下:
1、客户端先获取「当前时间戳T1」
2、客户端依次向这 5 个 Redis 实例发起加锁请求(用前面讲到的 SET 命令),且每个请求会设置超时时间(毫秒级,要远小于锁的有效时间),如果某一个实例加锁失败(包括网络超时、锁被其它人持有等各种异常情况),就立即向下一个 Redis 实例申请加锁
3、如果客户端从 >=3 个(大多数)以上 Redis 实例加锁成功,则再次获取「当前时间戳T2」,如果 T2 - T1 < 锁的过期时间,此时,认为客户端加锁成功,否则认为加锁失败
4、加锁成功,去操作共享资源(例如修改 MySQL 某一行,或发起一个 API 请求)
5、加锁失败,向「全部节点」发起释放锁请求
发布于:1个月前 (04-02) IP属地:四川省
我来回答