Redis单点故障+红锁原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一、Redis单点故障
- 二、红锁原理
- 三、Redission实现了红锁
一、Redis单点故障
单台redis容易出单点故障采用集群,获取到锁之后数据持久化到rdb,aof文件中从节点有可能在从主节点拿到数据之前,主节点就已经挂了,sentinel哨兵机制把从节点选为主节点,此时数据还没有拉取到新的主节点上,新主节点还不知道已经有线程拿到了锁,此时就有两个线程获取到了锁,分布式锁就失效了。
解决点单故障方式:引入红锁机制
二、红锁原理
用Redis中的多个master实例,来获取锁,只有大多数实例获取到了锁,才算是获取成功。具体的红锁算法分为以下五步:
- 获取当前的时间(单位是毫秒)。
- 使用相同的key和随机值在N个节点上请求锁。这里获取锁的尝试时间要远远小于锁的超时时间,防止某个masterDown了,我们还在不断的获取锁,而被阻塞过长的时间。
- 只有在大多数节点上获取到了锁,而且总的获取时间小于锁的超时时间的情况下,认为锁获取成功了。
- 如果锁获取成功了&#x