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 相关文章推荐
SpringBoot项目中控制台日志的保存配置操作
Jun 18 Java/Android
深入理解java.lang.String类的不可变性
Jun 27 Java/Android
新手初学Java网络编程
Jul 07 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
Aug 23 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
Springboot如何同时装配两个相同类型数据库
Nov 17 Java/Android
Java十分钟精通进阶适配器模式
Apr 06 Java/Android
SpringBoot全局异常处理方案分享
May 25 Java/Android
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 Java/Android
springboot为异步任务规划自定义线程池的实现
Jun 14 Java/Android
Java完整实现记事本代码
Jun 16 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 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 xml-rpc远程调用
2008/12/19 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
jquery的$().each和$.each的区别
2019/01/18 jQuery
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
Python实现的双色球生成功能示例
2017/12/18 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
PyQt5实现简易电子词典
2019/06/25 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
财务会计自荐信范文
2014/02/21 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
实习协议书
2015/01/27 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
python实现图片批量压缩
2021/04/24 Python
Django分页器的用法你都了解吗
2021/05/26 Python
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js