当前位置: 首页 > news >正文

Redisson分布式锁解决方案

官方地址


官网: https://redisson.org
github: https://github.com/redisson/redisson

基于setnx实现的分布式锁存在的问题

在这里插入图片描述
redisson分布式锁原理

  • 不可重入: 利用hash结构记录线程id和重入次数
  • 不可重试: 利用信号量和PubSub功能实现等待、唤醒, 获取锁失败的重试机制
  • 超时释放: 利用WatchDog, 每隔一段时间(releaseTime/3), 重置超时时间
    在这里插入图片描述

依赖和配置


  • 引入依赖
		<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version></dependency>
  • 配置
	@Beanpublic RedissonClient redissonClient(){Config config = new Config();// 添加redis地址, 这里添加了单点的地址, 也可以用config.useClusterServers()添加集群地址config.useSingleServer().setAddress("redis://localhost:6379").setPassword("123456");return Redisson.create(config);}
  • 三台单点redis服务
	@Beanpublic RedissonClient redissonClient(){Config config = new Config();// 添加redis地址, 这里添加了单点的地址, 也可以用config.useClusterServers()添加集群地址config.useSingleServer().setAddress("redis://localhost:6379").setPassword("123456");return Redisson.create(config);}@Beanpublic RedissonClient redissonClient2(){Config config = new Config();// 添加redis地址, 这里添加了单点的地址, 也可以用config.useClusterServers()添加集群地址config.useSingleServer().setAddress("redis://localhost:6380").setPassword("123456");return Redisson.create(config);}@Beanpublic RedissonClient redissonClient3(){Config config = new Config();// 添加redis地址, 这里添加了单点的地址, 也可以用config.useClusterServers()添加集群地址config.useSingleServer().setAddress("redis://localhost:6381").setPassword("123456");return Redisson.create(config);}
	RLock multiLock;@BeforeEachvoid setUp() {RLock lock = redissonClient.getLock("xiaoyuxia");RLock lock2 = redissonClient2.getLock("xiaoyuxia");RLock lock3 = redissonClient3.getLock("xiaoyuxia");multiLock = redissonClient.getMultiLock(lock, lock2, lock3);}@Testvoid test() throws Exception {boolean b = multiLock.tryLock();try {if (b) {// TODO}} finally {multiLock.unlock();}}
http://www.lryc.cn/news/317462.html

相关文章:

  • linux命令深入研究——cat
  • 代码随想录算法训练营第40天|343. 整数拆分、96.不同的二叉搜索树
  • 二叉树算法
  • 【2024年5月备考新增】《软考真题分章练习(答案解析) - 4 项目范围管理(高项)》
  • Docker拉取镜像存储不足
  • JUNIT5+Mockito单元测试
  • 【C#】【SAP2000】读取SAP2000中所有Frame对象的应力比到Grasshopper中
  • 一台服务器部署两个独立的mysql实例
  • SpringBoot(Lombok + Spring Initailizr + yaml)
  • 数据库基础知识超详细解析~‍(进阶/复习版)
  • 创建对象的方法有哪些
  • Oracle 10g字符编码
  • 掌握抽象基础之20个必备原则,看完你还不会,你打我
  • 设计模式 -- 2:策略模式
  • 【快速上手ProtoBuf】proto 3 语法详解
  • 人工智能的幽默“失误”
  • js的异步请求?
  • 华润对象存储(OBS)工具类
  • 强缓存和协商缓存的区别?
  • ChatGPT提问技巧——对抗性提示
  • openGauss使用BenchmarkSQL进行性能测试(上)
  • Java的线程池机制
  • EasyCode 插件的具体使用
  • Ypay源支付6.9无授权聚合免签系统可运营源码
  • SpringBoot+Vue项目报错(问题已解决)
  • DEAP 自定义交叉操作
  • ByText
  • Vcenter esxi web界面访问提示权限被拒绝
  • 掌握FilterOutputStream类!
  • YOLOv8改进 | 图像去雾 | 特征融合注意网络FFA-Net增强YOLOv8对于模糊图片检测能力(北大和北航联合提出)