java 高併發解決方案

高併發

由於分佈式系統的問世,高併發(High Concurrency)通常是指通過設計保證系統能夠同時並行處理很多請求。通俗來講,高併發是指在同一個時間點,有很多用戶同時的訪問同一 API 接口或者 Url 地址。它經常會發生在有大活躍用戶量,用戶高聚集的業務場景中。


普通單應用併發:

1.使用關鍵字synchronized就可實現。

即想提高效率不對方法添加synchronized,又想保證數據準確性,最後使用synchronized(userId) 在Controller層加鎖(保證了只有重複數據被加鎖,在Controller使用的原因是因為事務會在Service調用完畢才被提交,我實驗過在Service同步,150併發會出現2條重複數據,因為事務還沒來得及提交)

測試結果:測試了3次150併發 不到一秒的時間全部返回,結果1條登記成功,149條返回該作者已登記

2.事物級別設置最大

分佈式環境:

1.數據庫行級索,優點:簡單粗暴;缺點:容易死鎖&性能差,非數據庫專業人士不建議使用。 使用對數據庫添加行鎖,實驗發現還是會出現2條重複數據 分析: 理論上的結果應該是1條成功,149條失敗。 對數據庫的select語句添加行鎖必須作用於某條記錄,但是第一次報送時,數據庫中並沒有這條數據,因此行鎖根本沒有加上,導致第二條數據成功異步使用select語句。 第一次報送成功以後,數據庫中有了這條數據,select語句成功的對這條記錄添加了行鎖,所以後邊不會出現重複數據。因此此法不可用

2.通過數據庫表的唯一索引解決

3.隊列

4.分佈式鎖 (如redis鎖,Zookeeper)


java 高併發解決方案

轉載自GoslingWu,未經許可,嚴禁抄襲

更多相關內容,Java&python,軟件開發等學習資料,電子書及視頻還有高級講師公開課免費資源

需要的可以私聊小編髮送【學習】二字


分享到:


相關文章: