使用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实现分布式锁,封装之后的方法更好用!相关推荐

  1. 明了 | 看了这篇文章,多年不能理解的分布式事物,终于看懂了!

    hi !我是小小,我们又见面了,在本篇中,小小将会详细的介绍关于分布式事物的问题,看完了这篇文章,多年来的关于分布式事物的问题全都会了. 基础知识 工欲善其事,必先利其器.所以需要先有一定的基础知识. ...

  2. 怎样才能让计算机发出钢琴的按键声,这篇文章教你如何弹出钢琴好音色

    原标题:这篇文章教你如何弹出钢琴好音色 怎样演奏好钢琴的音色 导读:在教学中往往容易陷于就事论事地去应付面临的各种视谱.节奏.速度.熟练.背谱等问题的解决之中,而无暇去顾及声音的质量,这恰恰是误区之所 ...

  3. 容器网络连接被重置?这篇文章教你如何去定位及分析

    前段时间公司的安卓打包服务出现问题,现象是在上传 360 服务器进行加固的时候,非常大概率会卡在上传阶段,长时间重试最后失败.我对这个情况进行了一些排查分析,解决了这个问题,写了这篇长文复盘了排查的经 ...

  4. excel全文翻译怎么操作?这篇文章教你如何翻译excel

    我们在工作中,经常会遇到需要将excel翻译成外语或中文的时候,该怎么办呢?你是一行一行的复制去浏览器查找,然后再复制粘贴回表格吗?要是这样做的话,不仅浪费时间,效率还很低.那有没有什么方法是可以直接 ...

  5. 录音如何转文字?这篇文章教你录音转换文字怎么操作

    在当今数字化时代,我们越来越依赖语音录音来记录会议.演讲.采访等各种场合的内容.然而,对于那些需要对录音中的信息进行进一步编辑或搜索的人来说,手动听取并转录录音内容可能会是一项耗时且繁琐的任务.那有没 ...

  6. python下载所需要的库时,下载速度太慢,这篇文章教你如何解决

    看到这篇文章的读者,请往最后面看,最近对这个文章有所更改,标题中的内容在后半部分讲解. 在为Pycharm配置opencv库的时候,下载了很多次,每次都被提示 requirement already ...

  7. 怎么利用知乎蹭实时热点?1篇文章教你

    怎么利用知乎蹭实时热点?作为问答社区平台的几大巨头之一,知乎的热点热搜榜一直都比较权威,非常适合采集科普类的素材,或者是做国内外实时热点解析.那么,怎么利用知乎去蹭实时热点呢?看完这篇文章你就懂了! ...

  8. 还记得 Flappy Bird 么?这篇文章教你如何用神经网络破朋友圈纪录!

    以下内容来源于一次部门内部的分享,主要针对AI初学者,介绍包括CNN.Deep Q Network以及TensorFlow平台等内容.由于笔者并非深度学习算法研究者,因此以下更多从应用的角度对整个系统 ...

  9. 学习python很无趣?看看这篇文章教你采集无水印美女视频(含视频教程)

    前言 嗨嗨,大家下午好 ~ 我又来给你们送福利了嘿嘿 今天教你们如何用python实现批量采集美女视频 ~ 小声说:这次还有视频教程! 正文 环境使用 Python 3.8 Pycharm 谷歌浏览器 ...

最新文章

  1. 博士申请 | ​香港中文大学LaVi实验室招收2022年秋季入学博士生、硕士生
  2. 记录一次@Transactional问题处理
  3. 微信录音滑动撤销 html5,微信中这个被取消的功能悄悄上线了,将语音上滑即可转换成文字...
  4. linux下vim的安装与配置(centos)
  5. php 可逆加密方法
  6. cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wwma2wne\opencv\module
  7. 七年为限 一觉梦已远——我与你的新贵族
  8. 方法、脚本-Pig Grunt之简单命令及实例说明-by小雨
  9. CentOS安装NVIDIA Video Codec SDK
  10. 电话号码正则表达式(标准)
  11. python矩阵相乘函数_Python实现的矩阵转置与矩阵相乘运算示例
  12. 【毕业设计】python+opencv+机器学习车牌识别
  13. matlab 脉冲频域压缩,大作业-雷达线性调频脉冲压缩的原理及其MATLAB仿真.doc
  14. 字段缩写ti表示什么_EBSCOhost数据库中,检索字段代码为TI、SO、AU分别表示
  15. 实验一:VLAN实验
  16. python中encode和decode使用讲解与演示
  17. [Excel 与 股票] 一图胜千言之 Excel 处理股票数据
  18. [数据结构与算法]动态规划:扔鸡蛋问题
  19. 终结拖延症——行动的理由
  20. 语音信号短时域分析之短时平均能量(四)

热门文章

  1. 新闻系统粗略说明文档
  2. python做乘法运算定律_最新乘法运算定律专项练习题
  3. 点击桌面计算机图打不开,idf,手把手教你怎么解决电脑桌面图标打不开
  4. 联想壁纸大赛——花卉与蝴蝶
  5. 地大计算机学院教授,张静(地大教授)
  6. mysql常见面试题
  7. 企业服务器虚拟化方案文档,服务器虚拟化在企业中的应用
  8. python监控程序编写_05-python进阶-简单监控程序开发
  9. vim使用帮助命令的方法
  10. is not None与not某某 的区别