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实践之抽象工厂模式
Jun 18 Java/Android
详解Java实现设计模式之责任链模式
Jun 23 Java/Android
Springboot集成阿里云OSS上传文件系统教程
Jun 28 Java/Android
一篇文章带你学习Mybatis-Plus(新手入门)
Aug 02 Java/Android
Java9新特性之Module模块化编程示例演绎
Mar 16 Java/Android
你知道Java Spring的两种事务吗
Mar 16 Java/Android
Netty客户端接入流程NioSocketChannel创建解析
Mar 25 Java/Android
Java 使用类型为Object的变量指向任意类型的对象
Apr 13 Java/Android
Flutter Navigator 实现路由传递参数
Apr 22 Java/Android
Android开发手册TextInputLayout样式使用示例
Jun 10 Java/Android
Android基础入门之dataBinding的简单使用教程
Jun 21 Java/Android
Java获取字符串编码格式实现思路
Sep 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
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
Python中set与frozenset方法和区别详解
2016/05/23 Python
python发送邮件功能实现代码
2016/07/15 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
Python如何实现远程方法调用
2020/08/07 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
全神贯注教学反思
2014/02/03 职场文书
生物制药专业求职信
2014/03/11 职场文书
年会搞笑主持词
2014/03/27 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
环保倡议书范文
2014/05/12 职场文书
团日活动总结怎么写
2014/06/25 职场文书
党的生日演讲稿
2014/09/10 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
获奖感言范文
2015/07/31 职场文书