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

目录

一、主从不一致产生原因

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


一、主从不一致产生原因

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

  2. Redis 中的哨兵机制

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

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

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

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

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

  • 主节点宕机,锁数据尚未同步,从节点变为新的主节点
  • 其他线程来获取锁,在新的主节点上能获取成功
  • 但是在其他主节点上也有锁的标识,线程无法在所有主节点上都获取到锁,则获取锁失败
  • 是否等待重试获取锁
    • 如果 waitTime == -1,表示不等待,直接返回 false,获取锁失败
    • 如果 waitTime != -1,表示要等待,先释放之前已经获取到的锁,从头再来,等待一段时间后,从头开始获取所有节点上的锁
  1. 优点
  • 高可用:主从节点的模式可以保留
  • 避免主从同步不一致时锁失效的问题
  1. 缺点
  • 运维成本高,实现复杂
  • 至少需要三台 Redis 服务器
相关推荐
算法与双吉汉堡1 天前
【短链接项目笔记】Day2 用户注册
java·redis·笔记·后端·spring
ChaITSimpleLove1 天前
基于 .NET Garnet 1.0.91 实现高性能分布式锁(使用 Lua 脚本)
分布式·.net·lua
原神启动11 天前
Kafka详解
分布式·kafka
yumgpkpm1 天前
Iceberg在Hadoop集群使用步骤(适配AI大模型)
大数据·hadoop·分布式·华为·zookeeper·开源·cloudera
rocksun1 天前
Tigris对象存储正式开源MCP OIDC身份提供商
redis·安全·微服务
元气满满-樱2 天前
分布式LNMP部署
分布式
摇滚侠2 天前
Redis 零基础到进阶,Spring Boot 整合 Redis,笔记93-99
spring boot·redis·笔记
ChristXlx2 天前
Linux安装redis(虚拟机适用)
linux·运维·redis
此生只爱蛋2 天前
【Redis】列表List类型
数据库·redis·缓存
Wang's Blog2 天前
RabbitMQ: 声明式配置简化管理
分布式·rabbitmq