354 字
2 分钟
Redis单点故障问题
单台Redis实现分布式锁存在单点故障问题,如果采用主从读写分离架构,如果一个客户端在主节点上锁成功,但是主节点突然宕机,由于主从延迟导致节点还没有同步到这个锁,此时可能有另一个客户端抢到新晋升的主节点,这个时候会导致两个客户端抢到了锁,产生数据不一致。
67%
全部章节
- 1 什么是Redis
- 2 Redis有哪些数据类型
- 3 Redisson延时队列架构
- 4 redis配置json序列化
- 5 为什么Redis设计为单线程而后面版本为啥又引入多线程呢
- 6 Redis为什么快
- 7 Redis中常见的数据类型有哪些
- 8 Redis的Hash是什么
- 9 Redis跳表
- 10 RedisZset实现原理
- 11 缓存与数据库一致性问题
- 12 Redis缓存击穿缓存穿透缓存雪崩
- 13 RedisString底层
- 14 Redis单点故障问题 阅读中
- 15 Redis如何实现分布式锁
- 16 Redis实现分布式锁的时候可能遇到的问题有哪些
- 17 Redis大Key问题
- 18 如何解决Redis中热点key的问题
- 19 Redis持久化机制
- 20 Redis数据过期后的删除策略
- 21 Redis主从复制的实现原理是什么
单点故障问题
单台Redis实现分布式锁存在单点故障问题,如果采用主从读写分离架构,如果一个客户端在主节点上锁成功,但是主节点突然宕机,由于主从延迟导致节点还没有同步到这个锁,此时可能有另一个客户端抢到新晋升的主节点,这个时候会导致两个客户端抢到了锁,产生数据不一致。
红锁
红锁基本思想:
- 部署多个Redis实例(通常5个)
- 客户端在大多数实例(至少3个)上请求锁,并在一定时间内获得成功,表示加锁成功。
- 使用RedLock可以提供更高的容错性,即使部分Redis实例故障,仍然能获得锁。
红锁实现步骤
- 客户端尝试在每个Redis实例上加锁,必须在有限时间内完成所有实例的加锁。
- 如果大多数实例(N / 2 + 1)加锁成功,就表示加锁成功。
- 否则,客户端将会释放所有已经加锁的实例,重新尝试。
红锁缺点
- 复杂性: 实现ReadLock要多个Redis实例,会增加复杂性。
- 性能: 需要多个Redis实例,会增加性能开销。
- 可靠性: 需要多个Redis实例,会增加可靠性开销。
- 成本: 需要多个Redis实例,会增加成本。
发现错误或想要改进这篇文章?
在 GitHub 上编辑此页 Redis单点故障问题
相关文章
按系列 / 标签 / 分类推荐