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 相关文章推荐
Spring中bean的生命周期之getSingleton方法
Jun 30 Java/Android
SpringBoot工程下使用OpenFeign的坑及解决
Jul 02 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
SpringBoot+VUE实现数据表格的实战
Aug 02 Java/Android
详解Spring Security中的HttpBasic登录验证模式
Mar 17 Java/Android
java后台调用接口及处理跨域问题的解决
Mar 24 Java/Android
Spring Boot 实现 WebSocket
Apr 30 Java/Android
mybatis 获取更新记录的id
May 20 Java/Android
MyBatis XPathParser解析器使用范例详解
Jul 15 Java/Android
SpringBoot详解自定义Stater的应用
Jul 15 Java/Android
app场景下uniapp的扫码记录
Jul 23 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 Undefined index和Undefined variable的解决方法
2008/03/27 PHP
常用的php对象类型判断
2008/08/27 PHP
深入解析php中的foreach函数
2013/08/31 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
高性能JavaScript DOM编程(1)
2015/08/11 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
基于JavaScript 实现拖放功能
2019/09/12 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
python字符串,数值计算
2016/10/05 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
Python变量和字符串详解
2017/04/29 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
python cs架构实现简单文件传输
2020/03/20 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
毕业生实习期转正自我鉴定
2014/09/26 职场文书
护士求职简历自我评价
2015/03/10 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
校园广播站开场白
2015/06/01 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS