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)題很?chē)?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è)線(xiàn)程,庫(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)文章:

網(wǎng)公網(wǎng)安備