Redisson分布式锁

2023-11-01

目录

一、分布式锁

1、分布式锁的设计原则

2、分布式锁的实现方案

二、Redisson

三、Redisson分布式锁

1.引入Redisson依赖

2.配置Redis

3.注入RedissonClient

4.使用RLock

总结


一、分布式锁

分布式锁是分布式系统中控制共享资源访问的一种锁实现,用分布式锁控制多个进程对资源的访问。

1、分布式锁的设计原则

  • 互斥性。同一时刻锁只能被一个线程持有。
  • 超时释放。锁定资源的客户端崩溃时,可以避免死锁,防止不必要的线程等待和资源浪费。
  • 可重入性。一个线程在持有锁的情况可以对其再次请求加锁,防止锁在线程执行完临界区操作之前释放。
  • 高性能和高可用。加锁和释放锁的过程性能开销要尽可能的低,同时也要保证高可用,防止分布式锁意外失效。
  • 支持阻塞和非阻塞。如果获取不到锁,不能无限期等待。
  • 支持公平锁和非公平锁
  • 避免死锁和锁失效

2、分布式锁的实现方案

  • redis 实现分布式锁。
  • zookeeper实现分布式锁。
  • 数据库实现分布式锁。

二、Redisson

Redisson是架设在Redis基础上,通讯基于Netty的中间件,企业级开发中使用Redis的最佳范本。Redisson 对象提供了关注点分离,这使开发者可以将注意力集中在数据建模和应用程序逻辑上。

三、Redisson分布式锁

1.引入Redisson依赖

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>3.17.5</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.配置Redis


spring:
  redis:
    database: 
    host:
    port:
    password:

3.注入RedissonClient


@Autowired
private RedissonClient redissonClient;

4.使用RLock


RLock rLock = redissonClient.getLock(orderId);
try {
    boolean lockFlag = rLock.tryLock(waitTime, TimeUnit.SECONDS);
    if (lockFlag) {
        // TODO 业务逻辑
    }
} catch (Exception e) {
    log.error("处理失败", e);
}finally {
    try {
        rLock.unlock();
    } catch (IllegalMonitorStateException e) {
        log.warn("没有获取到锁,解锁失败");
    }
}

总结

本文讲述了分布式锁的特征以及Redisson分布式锁的基础用法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redisson分布式锁 的相关文章

随机推荐

  • 网络基础:IP数据包格式

    目录 一 理论 1 IP数据包完整格式 2 IP数据包首部各字段 3 ARP协议 二 实验 1 华为系统中的ARP命令 一 理论 1 IP数据包完整格式 根据TCP IP 协议 使用 IP 协议传输数据的包被称为 IP 数据包 IP Dat
  • Ubuntu安装jenkins

    1 通过命令安装 sudo apt get install jenkins 如果报以下错 E 软件包 jenkins 没有可安装候选 执行以下命令 wget q O https pkg jenkins io debian jenkins i
  • LoadRunner性能测试基本步骤

    前言 本文旨在指导初学者使用LoadRunner进行基础的性能测试 我们在接到一个性能测试任务的时候 需要从以下几点考虑 我们的测试对象是什么 测试要求是什么 测试环境怎么部署的 业务规模如何 哪些业务点是客户最关注的等等 下面将从性能测试
  • Breakpad(跨平台crash工具)

    最近海思平台在项目测试过程中 经常出现coredump的问题 尤其是那些的不经常挂的情况 光看日志定位问题真的很难 同时生成的core文件由于各种动态链接和静态链接 分析起来实在是比较困难 为解决coredump问题 有必要提供一个跨平台的
  • Docker Volume原理及使用

    1 Volume原理 想要了解Docker Volume 首先我们需要知道Docker的文件系统是如何工作的 Docker镜像是由多个文件系统 只读层 叠加而成 当我们启动一个容器的时候 Docker会加载只读镜像层并在其上 译者注 镜像栈
  • U3D 材质转换为URP渲染

    创建URP项目 然后导入已有的package 发现预览图为品红色的 材质显示不正确 如下图所示 在项目的菜单栏选择升级渲染材质为URP渲染即可 最后的效果如下
  • HJ0427分隔输出

    要求 第一个数N为字符串的数量 第二个以后为连续输入的字符串 字符串之间用空格隔开 若字符串长度大于等于8 则每八个为一组 之间用空格隔开 切割后余下部分不满八个则用0补位 字符串长度小于8 则后补零 补满八个为止 升序输出 输入 2 ab
  • NOI20102010年,世博会在中国上海举办,吸引了数以千万计的中外游客前来参观。暑假期间小Z也来到了上海世博园, 她对世博园的拥挤早有所闻,对有的展馆甚至要排上好几个小时的队才能进入也做好了充分

    NOI2010 2010年 世博会在中国上海举办 吸引了数以千万计的中外游客前来参观 暑假期间小Z也来到了上海世博园 她对世博园的拥挤早有所闻 对有的展馆甚至要排上好几个小时的队才能进入也做好了充分准备 但为了使得自己的世博之旅更加顺利舒畅
  • ios混编flutter相机相册不可用

    问题描述 ios项目混编flutter的时候根据官网的方法添加混编代码后 有时候会出现在flutter端使用image picker插件调用相机相册时 相机相册使用不了的现象 MethodChannelFilePicker Platform
  • linux学习笔记(字符串测试 for循环)

    例题 1 传递一用户名参数给脚本 判断此用户的用户名跟其基本组的组名是否一致 并将结果显示出来 bin bash A 1 B id u 1 C id g 1 if B eq C then echo A 用户名和组名一样 else echo
  • 30道MySQL基础面试题

    每天晚上 00 00 执行 mysql 数据备份 请写出 crontab 配置项 答案 0 0 mysqldump uroot p123456 flush logs 数据库名 gt 备份文件名 每天凌晨 1 点在 data 目录新建当天日期
  • Vue3状态管理库Pinia——实现简易版购物车

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 正逐渐往全干发展 个人状态 研发工程师 现效力于中国工业软件事业 人生格言 积跬步至千里 积小流成江海 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 3项目实战 Node js
  • 为什么不能直接通过IP访问网站

    转 http www examw com java jichu 143769 为什么不能直接通过IP访问网站 为什么不能直接通过IP访问网站 从理论上说 在IE 或其他的Web浏览器 如Firefox 的地址栏中输入IP地址 都可能访问ww
  • AD个人常用快捷键记录

    避免以后太长时间没用忘记AD快捷键 快捷键 F2 拉线 F3 过孔 F4 敷铜 F9 矩形排列 7 切割铜皮 2 线选 3 框选 6 坐标移动 N 显示隐藏飞线 A 对齐 丝印位置 R M测量两个点之间的距离 R P测量两个物体边到边的最小
  • java 项目 远程调试_Java项目远程调试

    准备一个项目 比如我有个SpringBoot项目 打包好 上传服务器 服务器 1 开启端口 8080是项目端口 8000是远程调试端口 root localhost app firewall cmd zone public add port
  • gitlab代码上传方式1

    本地代码上传到gitlab上操作流程 自我总结 1 在gitlb上新建项目 点击New project 首次将代码上传到gitlab上时 先配置Settings中的SSH Keys 2 配置SSH Keys 那么SSH Keys是怎么获得的
  • 推荐几款可以直接在手机上编程的app(包含Java、C、Python等)

    这里介绍几款可以在手机上编程的app 分别是 1 java和Android AIDE集成开发环境 2 C语言 c语言编译器 C4droid 3 python QPython3 Termux 4 CSS HTML JavaScript HTM
  • python 预测任意天后股票数据_机器学习交易——如何使用回归预测股票价格?【翻译】...

    前几天 我读了一篇关于人工智能到目前为止是如何发展的以及它将走向何方的文章 我被吓了一跳 我也很难理解作者所描绘的未来的可能性 这是人工智能在医学领域应用的可能性之一 外科医生可以用她的运动皮层控制一个机器手术刀 而不是用她的手 她可以从手
  • 团队管理那点破事,OKR绩效、核心人才、面试、技术分享、研发流程

    微信搜索 微观技术 关注这个不喜欢内卷的程序员 精彩文章汇总 GitHub https github com aalansehaiyang technology talk Star 12K 汇总java生态圈常用技术框架 开源中间件 系统架
  • Redisson分布式锁

    目录 一 分布式锁 1 分布式锁的设计原则 2 分布式锁的实现方案 二 Redisson 三 Redisson分布式锁 1 引入Redisson依赖 2 配置Redis 3 注入RedissonClient 4 使用RLock 总结 一 分