hibernate使用簡單,但是對高併發環境有不少坑。
以下是筆者遇到的高併發之痛:
在做類似於秒殺任務時,使用了hibernate的setxx方法,在單例項併發100之內,使用樂觀鎖對數量的增加是正常的。但是當併發更大時,而且配置了多工,此時發現已下發任務數一直在反覆。奇怪的是使用了樂觀鎖更新,為什麼會發生這樣的事件呢?經過了增加快取,批量更新都無濟於事,開始懷疑是框架的原因。一步一步除錯,發現在保持更新之前使用了setxx方法來對數量進行了操作,它會自動儲存資料!
定位到了問題,果斷在更新之前去掉hibernate的setxx方法,通過spring的jdcbtemplate進行資料更新。
特記錄此問題,為以後使用框架時,從多方面考慮。後續專案切mybatis,使用原生的sql更靠譜!
高併發下搶購
了解高併發以及怎麼處理後,測試一下專案中下單的 邏輯很簡單,goods表中stock設定為unsigned。剛開始你可能會覺得這樣會出現超單的情況,但是測試後,沒有出現超單的情況。看似沒有問題,但是看過日誌發現問題還挺多的。這之前請看下這篇文章裡面有處理高併發下單的情況。goods id num g...
高併發下的HashMap
1.hashmap在插入元素過多的時候需要進行resize,resize的條件是 hashmap.size capacity loadfactor。2.hashmap的resize包含擴容和rehash兩個步驟,rehash在併發的情況下可能會形成鍊錶環 hashmap進行儲存時,假設size超過當...
高併發下的MySQL
對於遊戲來說,db存在大量的insert update 可謂玩家的很多動作都會與db溝通。本文暫時忽略os 中的 io利用率,網絡卡流量,cpu變化情況,介紹如何檢視mysql部分引數 檢視每秒事務數 show global status like com commit show global st...