springboot利用redis、Redisson處理并發(fā)問(wèn)題的操作
在工作中,遇到的接口基本都是長(zhǎng)這樣的:
如下為一個(gè)庫(kù)存扣減的接口。從redis中獲取庫(kù)存數(shù)量,然后扣減一個(gè)數(shù)量
問(wèn)題這個(gè)接口在并發(fā)的情況下是有問(wèn)題,可以用jmeter測(cè)試一下(用postman壓力測(cè)試了一下,沒(méi)有測(cè)出并發(fā)問(wèn)題。網(wǎng)上有的博客說(shuō)postman沒(méi)法測(cè)試并發(fā))
jmeter設(shè)置:100個(gè)并發(fā)
打印結(jié)果:
問(wèn)題很嚴(yán)重呀
解決方案,優(yōu)化如下:jmeter設(shè)置:101個(gè)并發(fā),stock=100,則正確結(jié)果是應(yīng)該會(huì)出現(xiàn)一次“扣減失敗,庫(kù)存不足”
打印如下,沒(méi)毛病
c:windowssystem32driversetc
jmeter測(cè)試:
兩個(gè)應(yīng)用的后臺(tái)打印:從日志來(lái)看,synchronized沒(méi)有起到作用。畢竟synchronized是JVM級(jí)別的,沒(méi)法對(duì)集群的情況進(jìn)行加鎖
解決方案:引入今天的大佬,分布式鎖:Redisson
代碼優(yōu)化如下:
jmeter測(cè)試:101個(gè)線程,庫(kù)存數(shù)量100
后臺(tái)打印:
出現(xiàn)了一次扣減失敗的情況,運(yùn)行正常
注意點(diǎn):注意引入redisson比較新的版本,避免出現(xiàn)一些遠(yuǎn)程連接斷絕的一些問(wèn)題
源碼地址:https://github.com/windyNaruto9833/redis
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Python TestSuite生成測(cè)試報(bào)告過(guò)程解析2. 增大python字體的方法步驟3. Spring security 自定義過(guò)濾器實(shí)現(xiàn)Json參數(shù)傳遞并兼容表單參數(shù)(實(shí)例代碼)4. 在JSP中使用formatNumber控制要顯示的小數(shù)位數(shù)方法5. Vue作用域插槽實(shí)現(xiàn)方法及作用詳解6. IntelliJ IDEA設(shè)置默認(rèn)瀏覽器的方法7. JAMon(Java Application Monitor)備忘記8. Python os庫(kù)常用操作代碼匯總9. Python 如何展開(kāi)嵌套的序列10. 如何清空python的變量
