如何用redis实现分布式锁?这篇文章教你用redisson实现分布式锁,封装之后的方法更好用!
使用redission实现分布式锁
添加配置类
import org.redisson.Redisson;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** redisson 配置类*/
@Configuration
public class RedissonConfig {@Value("${spring.redis.host}")private String host;@Value("${spring.redis.port}")private String port;@Value("${spring.redis.password}")private String password;@Beanpublic Redisson getRedisson(){Config config = new Config();config.useSingleServer().setAddress("redis://" + host + ":" + port);//.setPassword(password);//添加主从配置
// config.useMasterSlaveServers().setMasterAddress("").setPassword("").addSlaveAddress(new String[]{"",""});return (Redisson) Redisson.create(config);}}
测试
@RequestMapping("/redisson")public String redisson(){String lockKey = "product_001";//商品id作为锁RLock lock = redisson.getLock(lockKey);try{//这里如果其他线程加锁失败,会while一直循环阻塞//同时在后台起一个线程,每隔10秒(1/3的超时时间)会判断这把锁是否释放,如果未释放则刷新超时时间System.out.println("准备尝试获取锁");lock.lock(30, TimeUnit.SECONDS);System.out.println("进来了,开始停8秒");Thread.sleep(8000);//这里写逻辑} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}return "success";}
原理
解析
1.使用redis设置过期时间(假如10秒),redisson会又一个监听线程,每隔一段时间(一般10*2/3=6秒)会刷新这个key的过期时间,防止业务没有执行完就释放了锁。
2.设置过期时间的目的:防止系统突然挂掉,死锁。时间一过就可以释放锁。
3.当锁已经被获取之后,会一直不断地尝试获取锁(自旋锁),直到锁获取成功,执行业务逻辑。
4.锁的key一般就是用业务的流水号,或者商品的编号,唯一的。
分布式锁目的
1.高并发下实现串行化。
2.实现幂等性(需要在代码中进行判断)。
分布式锁的缺点
1.降低系统性能。
2.系统繁杂更容易出现问题,不好维护。
如何用redis实现分布式锁?这篇文章教你用redisson实现分布式锁,封装之后的方法更好用!相关推荐
- 明了 | 看了这篇文章,多年不能理解的分布式事物,终于看懂了!
hi !我是小小,我们又见面了,在本篇中,小小将会详细的介绍关于分布式事物的问题,看完了这篇文章,多年来的关于分布式事物的问题全都会了. 基础知识 工欲善其事,必先利其器.所以需要先有一定的基础知识. ...
- 怎样才能让计算机发出钢琴的按键声,这篇文章教你如何弹出钢琴好音色
原标题:这篇文章教你如何弹出钢琴好音色 怎样演奏好钢琴的音色 导读:在教学中往往容易陷于就事论事地去应付面临的各种视谱.节奏.速度.熟练.背谱等问题的解决之中,而无暇去顾及声音的质量,这恰恰是误区之所 ...
- 容器网络连接被重置?这篇文章教你如何去定位及分析
前段时间公司的安卓打包服务出现问题,现象是在上传 360 服务器进行加固的时候,非常大概率会卡在上传阶段,长时间重试最后失败.我对这个情况进行了一些排查分析,解决了这个问题,写了这篇长文复盘了排查的经 ...
- excel全文翻译怎么操作?这篇文章教你如何翻译excel
我们在工作中,经常会遇到需要将excel翻译成外语或中文的时候,该怎么办呢?你是一行一行的复制去浏览器查找,然后再复制粘贴回表格吗?要是这样做的话,不仅浪费时间,效率还很低.那有没有什么方法是可以直接 ...
- 录音如何转文字?这篇文章教你录音转换文字怎么操作
在当今数字化时代,我们越来越依赖语音录音来记录会议.演讲.采访等各种场合的内容.然而,对于那些需要对录音中的信息进行进一步编辑或搜索的人来说,手动听取并转录录音内容可能会是一项耗时且繁琐的任务.那有没 ...
- python下载所需要的库时,下载速度太慢,这篇文章教你如何解决
看到这篇文章的读者,请往最后面看,最近对这个文章有所更改,标题中的内容在后半部分讲解. 在为Pycharm配置opencv库的时候,下载了很多次,每次都被提示 requirement already ...
- 怎么利用知乎蹭实时热点?1篇文章教你
怎么利用知乎蹭实时热点?作为问答社区平台的几大巨头之一,知乎的热点热搜榜一直都比较权威,非常适合采集科普类的素材,或者是做国内外实时热点解析.那么,怎么利用知乎去蹭实时热点呢?看完这篇文章你就懂了! ...
- 还记得 Flappy Bird 么?这篇文章教你如何用神经网络破朋友圈纪录!
以下内容来源于一次部门内部的分享,主要针对AI初学者,介绍包括CNN.Deep Q Network以及TensorFlow平台等内容.由于笔者并非深度学习算法研究者,因此以下更多从应用的角度对整个系统 ...
- 学习python很无趣?看看这篇文章教你采集无水印美女视频(含视频教程)
前言 嗨嗨,大家下午好 ~ 我又来给你们送福利了嘿嘿 今天教你们如何用python实现批量采集美女视频 ~ 小声说:这次还有视频教程! 正文 环境使用 Python 3.8 Pycharm 谷歌浏览器 ...
最新文章
- 博士申请 | ​香港中文大学LaVi实验室招收2022年秋季入学博士生、硕士生
- 记录一次@Transactional问题处理
- 微信录音滑动撤销 html5,微信中这个被取消的功能悄悄上线了,将语音上滑即可转换成文字...
- linux下vim的安装与配置(centos)
- php 可逆加密方法
- cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wwma2wne\opencv\module
- 七年为限 一觉梦已远——我与你的新贵族
- 方法、脚本-Pig Grunt之简单命令及实例说明-by小雨
- CentOS安装NVIDIA Video Codec SDK
- 电话号码正则表达式(标准)
- python矩阵相乘函数_Python实现的矩阵转置与矩阵相乘运算示例
- 【毕业设计】python+opencv+机器学习车牌识别
- matlab 脉冲频域压缩,大作业-雷达线性调频脉冲压缩的原理及其MATLAB仿真.doc
- 字段缩写ti表示什么_EBSCOhost数据库中,检索字段代码为TI、SO、AU分别表示
- 实验一:VLAN实验
- python中encode和decode使用讲解与演示
- [Excel 与 股票] 一图胜千言之 Excel 处理股票数据
- [数据结构与算法]动态规划:扔鸡蛋问题
- 终结拖延症——行动的理由
- 语音信号短时域分析之短时平均能量(四)