springboot利用redis、Redisson處理並發問題的操作
一、引入問題
在工作中,遇到的接口基本都是長這樣的:
如下為一個庫存扣減的接口。從redis中獲取庫存數量,然後扣減一個數量
問題這個接口在並發的情況下是有問題,可以用jmeter測試一下(用postman壓力測試瞭一下,沒有測出並發問題。網上有的博客說postman沒法測試並發)
jmeter設置:100個並發
打印結果:
問題很嚴重呀
解決方案,優化如下:
jmeter設置:101個並發,stock=100,則正確結果是應該會出現一次“扣減失敗,庫存不足”
打印如下,沒毛病
二、如上隻是單應用的情況,那如果是集群呢,結果會是怎麼樣?
1、nginx配置
2、修改本地hosts文件
c:\windows\system32\drivers\etc
3、利用idea啟動兩個應用,端口號分別為8080,8090,idea記得修改啟動配置
jmeter測試:
兩個應用的後臺打印:從日志來看,synchronized沒有起到作用。畢竟synchronized是JVM級別的,沒法對集群的情況進行加鎖
解決方案:引入今天的大佬,分佈式鎖:Redisson
代碼優化如下:
jmeter測試:101個線程,庫存數量100
後臺打印:
出現瞭一次扣減失敗的情況,運行正常
註意點:註意引入redisson比較新的版本,避免出現一些遠程連接斷絕的一些問題
源碼地址:https://github.com/windyNaruto9833/redis
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 基於Redission的分佈式鎖實戰
- Spring boot 整合 Redisson實現分佈式鎖並驗證功能
- github訪問速度慢的問題完美解決
- 瀏覽器不能正常訪問Github的問題解決
- Windows中Redis安裝配置流程並實現遠程訪問功能