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 @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
Java Optional<Foo>转换成List<Bar>的实例方法
Jun 20 Java/Android
Java基础-封装和继承
Jul 02 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
java如何实现socket连接方法封装
Sep 25 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
SpringDataJPA在Entity中常用的注解介绍
Dec 06 Java/Android
maven依赖的version声明控制方式
Jan 18 Java/Android
Java实现经典游戏泡泡堂的示例代码
Apr 04 Java/Android
零基础学java之方法的定义与调用详解
Apr 10 Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 Java/Android
SpringBoot深入分析讲解监听器模式下
Jul 15 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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
使用JavaScript实现旋转的彩圈特效
2015/06/23 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python Tkinter GUI编程入门介绍
2015/03/10 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
通过自学python能找到工作吗
2020/06/21 Python
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
市场部规章制度
2014/01/24 职场文书
2014年政协工作总结
2014/12/09 职场文书
五年级小学生评语
2014/12/26 职场文书
上诉答辩状范文
2015/05/22 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
基于Python实现一个春节倒计时脚本
2022/01/22 Python
Python开发五子棋小游戏
2022/05/02 Python