springboot利用redis、Redisson处理并发问题的操作


Posted in Java/Android onJune 18, 2021

一、引入问题

在工作中,遇到的接口基本都是长这样的:

如下为一个库存扣减的接口。从redis中获取库存数量,然后扣减一个数量

springboot利用redis、Redisson处理并发问题的操作

问题这个接口在并发的情况下是有问题,可以用jmeter测试一下(用postman压力测试了一下,没有测出并发问题。网上有的博客说postman没法测试并发)

jmeter设置:100个并发

springboot利用redis、Redisson处理并发问题的操作

打印结果:

springboot利用redis、Redisson处理并发问题的操作

问题很严重呀

解决方案,优化如下:

springboot利用redis、Redisson处理并发问题的操作

jmeter设置:101个并发,stock=100,则正确结果是应该会出现一次“扣减失败,库存不足”

打印如下,没毛病

springboot利用redis、Redisson处理并发问题的操作

二、如上只是单应用的情况,那如果是集群呢,结果会是怎么样?

1、nginx配置

springboot利用redis、Redisson处理并发问题的操作

2、修改本地hosts文件

c:\windows\system32\drivers\etc

springboot利用redis、Redisson处理并发问题的操作

springboot利用redis、Redisson处理并发问题的操作

3、利用idea启动两个应用,端口号分别为8080,8090,idea记得修改启动配置

springboot利用redis、Redisson处理并发问题的操作

jmeter测试:

springboot利用redis、Redisson处理并发问题的操作

两个应用的后台打印:从日志来看,synchronized没有起到作用。毕竟synchronized是JVM级别的,没法对集群的情况进行加锁

springboot利用redis、Redisson处理并发问题的操作

springboot利用redis、Redisson处理并发问题的操作

解决方案:引入今天的大佬,分布式锁:Redisson

代码优化如下:

springboot利用redis、Redisson处理并发问题的操作

jmeter测试:101个线程,库存数量100

springboot利用redis、Redisson处理并发问题的操作

后台打印:

springboot利用redis、Redisson处理并发问题的操作

springboot利用redis、Redisson处理并发问题的操作

springboot利用redis、Redisson处理并发问题的操作

出现了一次扣减失败的情况,运行正常

注意点:注意引入redisson比较新的版本,避免出现一些远程连接断绝的一些问题

源码地址:https://github.com/windyNaruto9833/redis

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java 中的 Unsafe 魔法类的作用大全
Jun 26 Java/Android
探讨Java中的深浅拷贝问题
Jun 26 Java/Android
SpringBoot实现异步事件驱动的方法
Jun 28 Java/Android
详细了解java监听器和过滤器
Jul 09 Java/Android
dubbo服务整合zipkin详解
Jul 26 Java/Android
浅谈Java父子类加载顺序
Aug 04 Java/Android
java调用Restful接口的三种方法
Aug 23 Java/Android
JPA 通过Specification如何实现复杂查询
Nov 23 Java/Android
java objectUtils 使用可能会出现的问题
Feb 28 Java/Android
使用HttpSessionListener监听器实战
Mar 17 Java/Android
Mybatis-plus配置分页插件返回统一结果集
Jun 21 Java/Android
tree shaking对打包体积优化及作用
Jul 07 Java/Android
ConstraintValidator类如何实现自定义注解校验前端传参
SpringBoot项目中控制台日志的保存配置操作
Jun 18 #Java/Android
浅谈@Value和@Bean的执行顺序问题
Jun 16 #Java/Android
SpringBoot2 参数管理实践之入参出参与校验的方式
Jun 16 #Java/Android
SpringBoot生成License的实现示例
Springboot如何使用logback实现多环境配置?
解决tk mapper 通用mapper的bug问题
You might like
php常见的魔术方法详解
2014/12/25 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
2015/03/18 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
vuex入门最详细整理
2020/03/04 Javascript
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
python实现滑雪游戏
2020/02/22 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
高中自我评价范文
2014/01/27 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
餐厅总厨求职信
2014/03/04 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js