springboot利用redis、Redisson處理并發(fā)問題的操作
一、引入問題
在工作中,遇到的接口基本都是長這樣的:
如下為一個庫存扣減的接口。從redis中獲取庫存數(shù)量,然后扣減一個數(shù)量

問題這個接口在并發(fā)的情況下是有問題,可以用jmeter測試一下(用postman壓力測試了一下,沒有測出并發(fā)問題。網(wǎng)上有的博客說postman沒法測試并發(fā))
jmeter設置:100個并發(fā)

打印結果:

問題很嚴重呀
解決方案,優(yōu)化如下:

jmeter設置:101個并發(fā),stock=100,則正確結果是應該會出現(xiàn)一次“扣減失敗,庫存不足”
打印如下,沒毛病

二、如上只是單應用的情況,那如果是集群呢,結果會是怎么樣?
1、nginx配置

2、修改本地hosts文件
c:\windows\system32\drivers\etc


3、利用idea啟動兩個應用,端口號分別為8080,8090,idea記得修改啟動配置

jmeter測試:

兩個應用的后臺打印:從日志來看,synchronized沒有起到作用。畢竟synchronized是JVM級別的,沒法對集群的情況進行加鎖


解決方案:引入今天的大佬,分布式鎖:Redisson
代碼優(yōu)化如下:

jmeter測試:101個線程,庫存數(shù)量100

后臺打?。?/p>



出現(xiàn)了一次扣減失敗的情況,運行正常
注意點:注意引入redisson比較新的版本,避免出現(xiàn)一些遠程連接斷絕的一些問題
源碼地址:https://github.com/windyNaruto9833/redis
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
springboot Quartz動態(tài)修改cron表達式的方法
這篇文章主要介紹了springboot Quartz動態(tài)修改cron表達式的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09

