首页 > 数据库 >Redisson分布式锁主从一致性问题解决

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

时间:2023-10-25 23:33:29浏览次数:51  
标签:Redisson lock lock2 lock3 lock1 加锁 RedissonMultiLock 主从 分布式

Redis联锁

联锁(RedissonMultiLock)对象可以将多个RLock对象关联为一个联锁,实现加锁和解锁功能。每个RLock对象实例可以来自于不同的Redisson实例。

如果负责储存分布式锁的某些Redis节点宕机以后,而且这些锁正好处于锁住状态,就会出现死锁问题。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗。看门狗的作用是在Redisson实例被关闭前,不断延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒,也可以通过修改Config.lockWatchdogTimeout来另行指定。

RLock lock1 = redissonClient1.getLock("lock1");
RLock lock2 = redissonClient2.getLock("lock2");
RLock lock3 = redissonClient3.getLock("lock3");

RedissonMultiLock lock = new RedissonMultiLock(lock1, lock2, lock3);
// 同时加锁:lock1 lock2 lock3
// 所有的锁都上锁成功才算成功。
lock.lock();
...
lock.unlock();
RedissonMultiLock lock = new RedissonMultiLock(lock1, lock2, lock3);
// 给lock1,lock2,lock3加锁,如果没有手动解开的话,(leaseTime=10s)10秒钟后将会自动解开
lock.lock(10, TimeUnit.SECONDS);

// 为加锁等待(waitTime=100s)100秒时间,并在加锁成功10秒钟后自动解开
boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
...
lock.unlock();

总结:

1 )不可重入Redis分布式锁:

◆原理:利用setnx的互斥性;

利用ex避免死锁;

释放锁时判断线程标示

缺陷:不可重入、无法重试、锁超时失效

2)可重入的Redis分布式锁:

◆原理:利用hash结构,记录线程标示和重入次数;

利用watchDog延续锁时间;

利用信号量控制锁重试等待

◆缺陷: redis宕机引起锁失效问题

3) Redisson的multilock:

◆原理:多个独立的Redis节点,必须在所有节点都获取重入

锁,才算获取锁成功

◆缺陷:运维成本高、实现复杂

标签:Redisson,lock,lock2,lock3,lock1,加锁,RedissonMultiLock,主从,分布式
From: https://blog.51cto.com/AmbitionGarden/8026247

相关文章

  • KubeSphere v3.4.0 创建Mysql 8.1.0 数据库主从记录
    主要讲下KubeSphere中创建【有状态】的【工作负载】需要注意的配置问题。这里的创建过程也不详细描述,网上简单找一找也有。重点在使用存储里面的配置字典:1、先创建一个配置字典,参考名:mysql-config2、创建一主一从的配置项,键(主库):master-1.cnf值(主库):[mysqld]port......
  • XA分布式事务协议
          XA(eXtendedArchitecture)是指由X/Open组织提出的分布式交易处理的规范。XA是一个分布式事务协议,由Tuxedo提出,所以分布式事务也称为XA事务。XA协议主要定义了事务管理器TM(TransactionManager,协调者)和资源管理器RM(ResourceManager,参与者)之间的接口。其中,资源管......
  • 故障解析丨Clone节点导致主从故障
    1.背景概述在一次主从复制架构中,由于主节点binlog损坏,导致从节点无法正常同步数据,只能重做从节点;因此使用MySQL8.0.17开始提供的clone技术进行恢复,恢复后的2天都发生了主从报错数据冲突。通过解析binlog发现,同一时刻主从节点都在执行同一条语句,因此询问业务是否在主从节点都执......
  • 分布式锁优化(基于redisson实现)
    基于setnx实现的分布式锁存在下面的问题:1.不可重入同一个线程无法多次获取同一把锁2.不可重试获取锁只尝试一次就返回false,没有重试机制3.超时释放锁超时释放虽然可以避免死锁,但如果是业务执行耗时较长,也会导致锁释放,存在安全隐患4.主从一致性(主写从读)如果Redis提供了主从集群,主......
  • Redis-cluster群集操作步骤(主从切换、新增、删除主从节点)
    1.进入集群客户端任意选一个redis节点,进入redis所在目录cd/redis所在目录/src/./redis-cli-h本地节点的ip-predis的端口号-a密码[root@mysql-db01~]#redis-cli-h10.0.0.51-p637910.0.0.51:6379> 2.查看集群中各个节点状态集群(cluster)clusterinfo......
  • 分布式定时任务-利用分布式定时任务框架xxl-job实现任务动态发布
     1.场景:项目前期使用k8s部署的单节点,后期生产需要将单节点的服务扩展多个节点,每个节点的定时任务使用的quartz实现,如果不加限制且定时任务有对数据库的写操作,在不同节点上执行的定时任务容易造成数据库产生脏数据,所以需要分布式任务框架对任务进行控制,这里我们使用xxl-job实现。......
  • 分布式事务
    本地事务在分布式下会出现的问题只能各自回滚各自的簇点头那边抛出异常--->全部回滚(ok)簇点第一个远程调用返回code不正确,我们可在主方法这抛异常(ok)簇点非第一个远程调用code不正确,我们只有那个远程调用和主方法会rollback,在其之前的远程调用无法rollback没人通知(NO)......
  • 谷粒商城分布式基础(一)—— 项目简介 & 分布式基础
     目录一项目简介1、项目背景二、分布式基础概念 分布式基础篇回到顶部一项目简介1、项目背景1.1电商模式市面上有5种常见的电商模式B2B、B2C、C2B、C2C、O2O;(1)B2B模式B2B(BusinesstoBusiness),是指商家和商家建立的商业关系,如阿里巴巴(2)B2C模式......
  • Redis主从复制部署小结
    Redis主从搭建主从架构单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。主从数据同步原理全量同步主从第一次建立连接时,会执行全量同步,将master节点的所有数据都拷贝给slave节点,流程:这里有一个问题,master如何得知salve是第一......
  • jenkins安装部署、主从架构、slave镜像、K8S对接
    介绍CI/CD工具,自动化持续集成和持续部署,用于构建各种自动化任务。官方提供了docker镜像https://hub.docker.com/r/jenkins/jenkins使用Deployments部署镜像,然后通过暴露jenkins的8080端口(web端口)和50000端口(slave通信端口),另外容器启动后所有数据都是存储在容器内的/var/jenkin......