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

【超详细】使用RedissonClient实现Redis分布式锁

使用RedissonClient实现Redis分布式锁是一个非常简洁和高效的方式。Redisson是一个基于Redis的Java客户端,它提供了许多高级功能,包括分布式锁、分布式集合、分布式映射等,简化了分布式系统中的并发控制。

添加依赖

首先,你需要在你的项目中添加Redisson的依赖。以下是Maven配置:

<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.2</version> <!-- 请根据需要选择最新版本 -->
</dependency>

配置RedissonClient

然后,你需要配置RedissonClient来连接Redis服务器:

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;public class RedissonConfig {public RedissonClient getRedissonClient() {Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379"); // 配置Redis服务器地址return Redisson.create(config);}
}

也可以在配置文件中配置你的redis连接,具体可以自行百度

创建RedissonTool工具类

@Component
public class RedissonTool {private final Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate RedissonClient redissonClient;/*** 获得锁的对象** @param lockKey 锁的key值* @return 锁对象*/public RLock getLockByKey(String lockKey) {RLock lock = null;try {lock = redissonClient.getLock(lockKey);} catch (Exception e) {logger.error("[RedissonTool.getLockByKey] getLock is exception}", e);}return lock;}/*** 获取锁是否成功** @param lock 锁对象* @return true=成功,false=失败*/public Boolean isTryLock(RLock lock) {//默认是通过boolean result = true;//获得锁的对象if (lock != null) {try {result = lock.tryLock();} catch (Exception e) {this.logger.error("[RedissonTool.getLockByKey] lock.tryLock is excepiton}", e);}}return result;}}

使用分布式锁

  1. 使用tryLock()
RLock lock = redissonClient.getLock("myLock");
boolean isLocked = false;
try {isLocked = lock.tryLock(lock); if (isLocked) {// 执行临界区代码} else {// 未获取到锁的处理逻辑}
} catch (InterruptedException e) {e.printStackTrace();
} finally {if (isLocked) {lock.unlock(); // 解锁}
}
  1. 直接使用 lock.lock()
RLock lock = redissonTool.getLockByKey(CacheConstants.ORDER_RESULT_DEAL + outTradeNo);
lock.lock(); // 直接获取锁,阻塞式
// 执行业务逻辑
lock.unlock(); // 解锁
http://www.lryc.cn/news/371902.html

相关文章:

  • CC攻击的有效应对方案
  • 自动驾驶基础一车辆模型
  • 机器学习:数据分布的漂移问题及应对方案
  • 公链常用的共识算法
  • 详解 Flink Table API 和 Flink SQL 之函数
  • rsa加签验签C#和js以及java互通
  • C语言中数组和指针的关系
  • idea 新建一个 JSP(JavaServer Pages)项目
  • 【名词解释】Unity中的表格布局组件及其使用示例
  • 判断当前设备为移动端自适应 平板和pc端为375移动端样式
  • Science Advances|用于胃部pH监测和早期胃漏检测的生物可吸收无线无源柔性传感器(健康监测/柔性传感/柔性电子)
  • C# 使用 webview2 嵌入网页
  • 公司面试题总结(五)
  • Flutter笔记:关于WebView插件的用法(上)
  • 计算机毕业设计Python+Django农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop Hive
  • phpcms仿蚁乐购淘宝客网站模板
  • leetcode695 岛屿的最大面积
  • 小程序无法调用服务端问题排查
  • Linux:多线程的操作
  • kunpeng的aarch64架构cpu、openeuler系统、昇腾服务器适配文档转换功能(doc转docx、ppt转pptx)
  • unity 打包PC安装包中常见文件的功能
  • 【Ardiuno】实验使用ESP32单片机实现高级web服务器暂时动态图表功能(图文)
  • 深入浅出服务网格(Service Mesh):现代微服务架构的护航者
  • node调试
  • docker拉取镜像失败超时的解决方法,docker配置国内镜像源
  • 建造气膜结构体育馆需要注意的事项—轻空间
  • 使用脚手架创建vue2项目(关闭eslint语法检查 、运行项目时自动打开网址、src文件夹简写方法)
  • 谷粒商城实战(036 k8s集群学习2-集群的安装)
  • 复旦微FMQL20SM全国产ARM+FPGA核心板,替代xilinx ZYNQ7020系列
  • NPM常见问题