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中的OPTIONAL
Jun 14 Java/Android
JVM入门之类加载与字节码技术(类加载与类的加载器)
Jun 15 Java/Android
分析设计模式之模板方法Java实现
Jun 23 Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
mybatis3中@SelectProvider传递参数方式
Aug 04 Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
关于ObjectUtils.isEmpty() 和 null 的区别
Feb 28 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
Mar 22 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 Java/Android
Android中的Launch Mode详情
Jun 05 Java/Android
Android Canvas绘制文字横纵向对齐
Jun 05 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/01/02 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
javascript来定义类的规范小结
2010/11/19 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
python显示天气预报
2014/03/02 Python
Pandas实现一列数据分隔为两列
2020/05/18 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
jupyter 添加不同内核的操作
2021/02/06 Python
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
群众路线教育实践活动总结
2014/10/30 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
创先争优个人总结
2015/03/04 职场文书
检讨书格式
2015/05/07 职场文书
公司欠款证明
2015/06/24 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Python实现照片卡通化
2021/12/06 Python
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL