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.hqwc.cn/news/536991.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java设计模式】十九、中介者模式

文章目录 1、中介者模式2、案例3、总结 1、中介者模式 如图&#xff1a; 同事类之间关联较多时&#xff0c;整体出现网状结构&#xff0c;耦合度极高。一个对象一变动&#xff0c;好多对象都得改。若变为右边的星形结构&#xff0c;则一个类的变动&#xff0c;只影响自身与中介…

TypeScript -哲学 Mapped types

1、快速复制另一个类型 2、对之前的类型进行重写 3、 4、 注意&#xff1a;这里直接 报错&#xff1a;因为模版字符串只能包含 不能退出 k的来源&#xff0c;所以报错。 Remove a property from a type

php 对接Bigo海外广告平台收益接口Reporting API

今天对接的是Bigo广告reporting api接口&#xff0c;拉取广告收益回来自己做统计。记录分享给大家 首先是文档地址,进入到BIGO后台就能看到文档地址以及参数&#xff1a; 文档地址&#xff1a;https://www.bigossp.com/guide/sdk/reportingApi/doc?type1 接入这些第三方广告…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Text)

显示一段文本的组件。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含Span和ImageSpan子组件。 接口 Text(content?: string | Resource, value?: TextOptions) 从API versi…

掌控无显示器Linux开发板:VNC远程桌面接入指南

掌控无显示器Linux开发板&#xff1a;VNC远程桌面接入指南 Linux开发板是许多技术人员常用的工具&#xff0c;但有时它们并不配备显示器。这时&#xff0c;VNC&#xff08;Virtual Network Console&#xff09;软件就成为了一个非常有用的工具&#xff0c;它允许用户通过网络远…

小程序开发——获取设备信息 API(二)

ty.device.getDeviceNumWithDpCode 根据 dpCode 获取群组下具备此 dpCode 的设备数量。如果是一个分享的群组&#xff0c;请通过接口获取。 需引入DeviceKit&#xff0c;且在>2.4.0版本才可使用 请求参数 Object object 属性类型默认值必填说明groupIdstring是groupId 群…

python--类与面向对象-2

一、对象在文本中的输出 class Person: def __init__(self,name,agg,live_value,money): self.namename self.aggagg self.live_valuelive_value self.moneymoney def describe(): print(%s的攻击力是%s%(self.name,self.agg)) pPerson(bob,10,10000,100) bPerson(tony,…

软考高级:面向对象分析概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

[综述笔记]Graph Neural Networks in Network Neuroscience

论文网址&#xff1a;Graph Neural Networks in Network Neuroscience | IEEE Journals & Magazine | IEEE Xplore 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xf…

java数据结构与算法刷题-----LeetCode90. 子集 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路:时间复杂度O( n 2 ∗ n n^2*n n2∗n),空间复杂度O(n) 7…

[RoarCTF 2019]Easy Java -不会编程的崽

考察一下大家对java-web知识点的掌握 熟悉的登录界面让你想起了某位故人没有&#xff0c;哈哈&#xff0c;但是并非sql注入。一番基础尝试无果后&#xff0c;看看help吧 这个url让你想起某位故人了吗&#xff1f;对文件下载。但是似乎没有响应。改成post请求即可。 我看见pk了&…

STM32第七节:GPIO输入——按键检测(包含带参宏)

目录 前言 STM32第七节&#xff1a;GPIO输入——按键检测&#xff08;包含带参宏&#xff09; 带参宏 代码替换展示 定义带参宏 GPIO输入——按键检测 硬件部分 端口输入数据寄存器&#xff08;GPIOx_IDR&#xff09; 编写程序 配置以及编写bsp_key文件 main函数编程…