Mysql并發(fā)方案

我們在工作中有一項業(yè)務,如果A修改了,那么B就要進行更新,如果A有多個呢?B就會有很多更新語句,比如當前用戶money=10,有很多個請求都來更新用戶money +10,這樣怎么辦呢?

mysql的事務隔離等級

事務 事務說明 臟讀 不可重讀 幻讀
READ_UNCOMMITTED 讀取未提交內容
READ_COMMITTED 讀取提交內容 ×
REPEATABLE_READ 可重讀 × ×
SERIALIZABLE 可串行化 × × ×

事務介紹

  • 臟讀
    臟讀又稱無效數(shù)據(jù)的讀出,是指在數(shù)據(jù)庫訪問中,事務T1將某一值修改,然后事務T2讀取該值,此后T1因為某種原因撤銷對該值的修改,這就導致了T2所讀取到的數(shù)據(jù)是無效的。
    臟讀就是指當一個事務正在訪問數(shù)據(jù),并且對數(shù)據(jù)進行了修改,而這種修改還沒有提交到數(shù)據(jù)庫中,這時,另外一個事務也訪問這個數(shù)據(jù),然后使用了這個數(shù)據(jù)。因為這個數(shù)據(jù)是還沒有提交的數(shù)據(jù),那么另外一個事務讀到的這個數(shù)據(jù)是臟數(shù)據(jù),依據(jù)臟數(shù)據(jù)所做的操作可能是不正確的。
  • 不可重復讀
    不可重復讀,是指在數(shù)據(jù)庫訪問中,一個事務范圍內兩個相同的查詢卻返回了不同數(shù)據(jù)。
    這是由于查詢時系統(tǒng)中其他事務修改的提交而引起的。比如事務T1讀取某一數(shù)據(jù),事務T2讀取并修改了該數(shù)據(jù),T1為了對讀取值進行檢驗而再次讀取該數(shù)據(jù),便得到了不同的結果。
  • 幻讀
    簡單的說,幻讀指當用戶讀取某一范圍的數(shù)據(jù)行時,另一個事務又在該范圍內插入了新行,當用戶再讀取該范圍的數(shù)據(jù)行時,會發(fā)現(xiàn)有新的“幻影” 行

選型與實驗.

我們的場景需要保障最終的數(shù)據(jù)的正確性, 兩個事務都開啟之后,必須保障修改數(shù)據(jù)之后提交能夠正確,這里我們選擇READ_COMMITTED允許不可重讀,或者REPEATABLE_READ 允許幻讀.

并發(fā)測試

我們使用java進行 一個用戶的查詢和更新操作,使用的是JPA,采用并發(fā)10,每次加10進行測試. 選取的級別是可重讀. 在并發(fā)狀態(tài)下 數(shù)據(jù)為40,很明顯無法保障數(shù)據(jù)的正確性.
并發(fā)會帶來意想不到的狀況,如何解決并發(fā)帶來的問題!!!!
我們的業(yè)務場景無法避免并發(fā)問題,mysql提供了鎖的機制,鑒于我們一般使用jpa,這里,我們通過JPA來檢驗下鎖的機制.

  • 樂觀鎖
    假設有個業(yè)務他們之間一般不會造成并發(fā),假如并發(fā)了就回滾.
  • 悲觀鎖
    假設業(yè)務之間存在并發(fā)沖突.請求會鎖定,使用后會解鎖.
  • 鎖類型(LockMode),由于我們使用的是mysql,一般我們使用悲觀排它鎖解決并發(fā)問題. PESSIMISTIC_WRITE

tips: 我們在使用中要

  • 關閉mysql自動提交功能
  • innodb_lock_wait_timeout 超時時間設置為300'\
  • show status like ‘table%’; 查看 Table_locks_waited
  • show status like 'innodb_row_lock%';
  • 解鎖: show processlist; 找到進程 kill id; (或者UNLOCK tables)
  • LOCK TABLES tbl_name READ; 鎖表操作.
    該業(yè)務場景我們要讀取B用戶,然后修改B用戶,我們在讀取用戶B時候加上鎖,這個時候所有外部的訪問將要等待處理完成之后才能夠獲取B用戶信息.
public interface UserRepository extends CrudRepository<User, Long> {
    @Lock(LockModeType.PESSIMISTIC_WRITE)
    User findOne(Long id);
}

w

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容