Redisson 分布式锁解决主从一致性问题的原理

目录

一、主从不一致产生原因

[二、Redisson 解决主从一致性的原理](#二、Redisson 解决主从一致性的原理)


一、主从不一致产生原因

  1. Redis 主从集群:主从读写分离,主节点将数据同步给从节点
  • 主节点:增删改
  • 从节点:读
  1. 主从同步存在延迟,若主节点宕机且从节点尚未同步主节点中的锁数据,则锁失效,出现主从不一致的情况

  2. Redis 中的哨兵机制

  • 哨兵发现主节点宕机后,会先断开与主节点连接的客户端,然后在从节点中选一个作为新的主节点,但锁还是失效,出现并发安全问题(其他线程来获取锁也能获取成功)

二、Redisson(multiLock)解决主从一致性的原理

  1. 不要主从关系,每台 Redis 都是独立的,都可以读写

  2. 获取锁:在所有的 Redis 服务器上都要获取锁

  3. 主从节点模式:模拟主节点失效

  • 主节点宕机,锁数据尚未同步,从节点变为新的主节点
  • 其他线程来获取锁,在新的主节点上能获取成功
  • 但是在其他主节点上也有锁的标识,线程无法在所有主节点上都获取到锁,则获取锁失败
  • 是否等待重试获取锁
    • 如果 waitTime == -1,表示不等待,直接返回 false,获取锁失败
    • 如果 waitTime != -1,表示要等待,先释放之前已经获取到的锁,从头再来,等待一段时间后,从头开始获取所有节点上的锁
  1. 优点
  • 高可用:主从节点的模式可以保留
  • 避免主从同步不一致时锁失效的问题
  1. 缺点
  • 运维成本高,实现复杂
  • 至少需要三台 Redis 服务器
相关推荐
Gl�ria12 小时前
Redis 高可用架构对比
数据库·redis
Zenova EdgeOS14 小时前
Python 工业边缘 redis-py 异步实战
开发语言·redis·python
hanchenxing14 小时前
前端异步任务三方案:Celery vs Redis Stream vs BullMQ 实战对比消息队列
前端·数据库·redis·异步任务·方案对比
九皇叔叔19 小时前
从本地事务到分布式事务
java·分布式·分布式事务·cap·base
刃神太酷啦21 小时前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
suweijie7681 天前
Redis 7.0.2 Docker Compose 部署
redis·docker
爱和冰阔落1 天前
【Linux】手写日志与固定线程池:任务队列、工作线程和安全退出
linux·运维·c++·redis·安卓
海宇大数据1 天前
分布式网关架构实战:基于海宇数据公安二要素认证即时版构建自动化司机准入网关
人工智能·分布式·架构·自动化
像风一样自由20201 天前
29.Redis在大模型应用中有哪些用途缓存会话与限流
数据库·人工智能·redis·缓存·大模型·milvus·智能体
weixin_460443561 天前
考试监控大屏为什么不能直接查数据库?WebSocket、Redis与实时数据聚合架构设计
数据库·redis·在线考试系统·培训考试系统·煤矿培训考试系统·煤矿在线考试系统·宏远培训考试系统