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 21 Java/Android
一篇文章带你复习java知识点
Jun 28 Java/Android
详解Spring Boot使用系统参数表提升系统的灵活性
Jun 30 Java/Android
JUnit5常用注解的使用
Jul 02 Java/Android
Java 语言中Object 类和System 类详解
Jul 07 Java/Android
gateway与spring-boot-starter-web冲突问题的解决
Jul 16 Java/Android
SpringCloud Function SpEL注入漏洞分析及环境搭建
Apr 08 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 28 Java/Android
Spring Data JPA框架自定义Repository接口
Apr 28 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
Spring boot admin 服务监控利器详解
Aug 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中for循环语句的几种变型
2007/03/16 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
php实现短信发送代码
2015/07/05 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
Python文档生成工具pydoc使用介绍
2015/06/02 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Python如何使用字符打印照片
2020/01/03 Python
Python更换pip源方法过程解析
2020/05/19 Python
为什么称python为胶水语言
2020/06/16 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
制药工程专业个人求职自荐信
2014/01/25 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
九一八事变演讲稿
2014/09/05 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书