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 相关文章推荐
启动Tomcat时出现大量乱码的解决方法
Jun 21 Java/Android
springBoot基于webSocket实现扫码登录
Jun 22 Java/Android
Spring Boot 启动、停止、重启、状态脚本
Jun 26 Java/Android
Java集成swagger文档组件
Jun 28 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
Java图书管理系统,课程设计必用(源码+文档)
Jun 30 Java/Android
新手初学Java List 接口
Jul 07 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
SpringBoot2零基础到精通之数据库专项精讲
Mar 22 Java/Android
教你在 Java 中实现 Dijkstra 最短路算法的方法
Apr 08 Java/Android
Spring Data JPA框架持久化存储数据到数据库
Apr 28 Java/Android
前端与RabbitMQ实时消息推送未读消息小红点实现示例
Jul 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
Terran兵种介绍
2020/03/14 星际争霸
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
基于php判断客户端类型
2016/10/14 PHP
php数组指针操作详解
2017/02/14 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
微信小程序实现表单校验功能
2020/03/30 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
对Django外键关系的描述
2019/07/26 Python
python RSA加密的示例
2020/12/09 Python
大三自我鉴定范文
2013/10/05 职场文书
初入社会应届生求职信
2013/11/18 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
工厂车间标语
2014/06/19 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis