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输出Hello World完美过程解析
Jun 13 Java/Android
MybatisPlus代码生成器的使用方法详解
Jun 13 Java/Android
SpringBoot生成License的实现示例
Jun 16 Java/Android
eclipse创建项目没有dynamic web的解决方法
Jun 24 Java/Android
解决Jenkins集成SonarQube遇到的报错问题
Jul 15 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 Java/Android
Spring Boot DevTools 全局配置学习指南
Mar 31 Java/Android
Java中API的使用方法详情
Apr 06 Java/Android
Java界面编程实现界面跳转
Jun 16 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中this,self,parent的区别详解
2013/06/08 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
jQuery的学习步骤
2011/02/23 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
jquery实现select选中行、列合计示例
2014/04/25 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
Python内置加密模块用法解析
2019/11/25 Python
python数据分析:关键字提取方式
2020/02/24 Python
树莓派升级python的具体步骤
2020/07/05 Python
外语学院毕业生的自我鉴定
2013/11/28 职场文书
化学实验员岗位职责
2013/12/28 职场文书
建筑文秘专业个人求职信范文
2013/12/28 职场文书
骨干教师培训感言
2014/01/16 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
英文产品推荐信
2015/03/27 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
python b站视频下载的五种版本
2021/05/27 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Vue router配置与使用分析讲解
2022/12/24 Vue.js