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 泛型详解(超详细的java泛型方法解析)
Jul 02 Java/Android
新手初学Java网络编程
Jul 07 Java/Android
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
Jul 26 Java/Android
Java org.w3c.dom.Document 类方法引用报错
Aug 07 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
Sep 25 Java/Android
Java9新特性之Module模块化编程示例演绎
Mar 16 Java/Android
springboot+zookeeper实现分布式锁
Mar 21 Java/Android
Java基础——Map集合
Apr 01 Java/Android
MyBatis配置文件解析与MyBatis实例演示
Apr 07 Java/Android
Mybatis-plus配置分页插件返回统一结果集
Jun 21 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 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 读取文件的正确方法
2009/04/29 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
smarty中js的调用方法示例
2014/10/27 PHP
浅谈php冒泡排序
2014/12/30 PHP
php实现的日历程序
2015/06/18 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
《中彩那天》教学反思
2014/02/22 职场文书
施工质量承诺书范文
2014/05/30 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
小班下学期个人总结
2015/02/12 职场文书
农村老人去世追悼词
2015/06/23 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
2019个人半年工作总结
2019/06/21 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis