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. PHP使用Swagger生成好看的API文檔2. ASP.NET MVC使用jQuery ui的progressbar實(shí)現(xiàn)進(jìn)度條3. Python3 json模塊之編碼解碼方法講解4. Python 制作查詢商品歷史價(jià)格的小工具5. Python 如何調(diào)試程序崩潰錯(cuò)誤6. Python 利用Entrez庫(kù)篩選下載PubMed文獻(xiàn)摘要的示例7. ASP基礎(chǔ)知識(shí)VBScript基本元素講解8. python使用jenkins發(fā)送企業(yè)微信通知的實(shí)現(xiàn)9. Python sublime安裝及配置過(guò)程詳解10. Python 合并拼接字符串的方法

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