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

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

打印結(jié)果:

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

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

二、如上只是單應(yīng)用的情況,那如果是集群呢,結(jié)果會(huì)是怎么樣?
1、nginx配置

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


3、利用idea啟動(dòng)兩個(gè)應(yīng)用,端口號分別為8080,8090,idea記得修改啟動(dòng)配置

jmeter測試:

兩個(gè)應(yīng)用的后臺打?。簭娜罩緛砜?,synchronized沒有起到作用。畢竟synchronized是JVM級別的,沒法對集群的情況進(jìn)行加鎖


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

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

后臺打印:



出現(xiàn)了一次扣減失敗的情況,運(yùn)行正常
注意點(diǎn):注意引入redisson比較新的版本,避免出現(xiàn)一些遠(yuǎn)程連接斷絕的一些問題
源碼地址:https://github.com/windyNaruto9833/redis
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于intellij idea打開就閃退或關(guān)閉詳細(xì)解決辦法
這篇文章主要介紹了關(guān)于intellij idea打開就閃退或關(guān)閉詳細(xì)解決辦法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Mybatis mapper接口動(dòng)態(tài)代理開發(fā)步驟解析
這篇文章主要介紹了Mybatis mapper接口動(dòng)態(tài)代理開發(fā)步驟解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Mybatis 動(dòng)態(tài)sql if 判讀條件等于一個(gè)數(shù)字的案例
這篇文章主要介紹了Mybatis 動(dòng)態(tài)sql if 判讀條件等于一個(gè)數(shù)字的案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
在springboot中注入FilterRegistrationBean不生效的原因
這篇文章主要介紹了在springboot中注入FilterRegistrationBean不生效的原因及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

