Mysql并發(fā)方案

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

mysql的事務(wù)隔離等級

事務(wù) 事務(wù)說明 臟讀 不可重讀 幻讀
READ_UNCOMMITTED 讀取未提交內(nèi)容
READ_COMMITTED 讀取提交內(nèi)容 ×
REPEATABLE_READ 可重讀 × ×
SERIALIZABLE 可串行化 × × ×

事務(wù)介紹

  • 臟讀
    臟讀又稱無效數(shù)據(jù)的讀出蒋畜,是指在數(shù)據(jù)庫訪問中,事務(wù)T1將某一值修改,然后事務(wù)T2讀取該值,此后T1因?yàn)槟撤N原因撤銷對該值的修改,這就導(dǎo)致了T2所讀取到的數(shù)據(jù)是無效的隶债。
    臟讀就是指當(dāng)一個(gè)事務(wù)正在訪問數(shù)據(jù)迅办,并且對數(shù)據(jù)進(jìn)行了修改蛔添,而這種修改還沒有提交到數(shù)據(jù)庫中放棒,這時(shí)姻报,另外一個(gè)事務(wù)也訪問這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)间螟。因?yàn)檫@個(gè)數(shù)據(jù)是還沒有提交的數(shù)據(jù)逗抑,那么另外一個(gè)事務(wù)讀到的這個(gè)數(shù)據(jù)是臟數(shù)據(jù),依據(jù)臟數(shù)據(jù)所做的操作可能是不正確的寒亥。
  • 不可重復(fù)讀
    不可重復(fù)讀邮府,是指在數(shù)據(jù)庫訪問中,一個(gè)事務(wù)范圍內(nèi)兩個(gè)相同的查詢卻返回了不同數(shù)據(jù)溉奕。
    這是由于查詢時(shí)系統(tǒng)中其他事務(wù)修改的提交而引起的褂傀。比如事務(wù)T1讀取某一數(shù)據(jù),事務(wù)T2讀取并修改了該數(shù)據(jù)加勤,T1為了對讀取值進(jìn)行檢驗(yàn)而再次讀取該數(shù)據(jù)仙辟,便得到了不同的結(jié)果。
  • 幻讀
    簡單的說鳄梅,幻讀指當(dāng)用戶讀取某一范圍的數(shù)據(jù)行時(shí)叠国,另一個(gè)事務(wù)又在該范圍內(nèi)插入了新行,當(dāng)用戶再讀取該范圍的數(shù)據(jù)行時(shí)戴尸,會(huì)發(fā)現(xiàn)有新的“幻影” 行

選型與實(shí)驗(yàn).

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

并發(fā)測試

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

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

tips: 我們在使用中要

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

w

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粟焊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子孙蒙,更是在濱河造成了極大的恐慌项棠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挎峦,死亡現(xiàn)場離奇詭異香追,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)坦胶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門透典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顿苇,你說我怎么就攤上這事峭咒。” “怎么了岖圈?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵讹语,是天一觀的道長。 經(jīng)常有香客問我蜂科,道長顽决,這世上最難降的妖魔是什么短条? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮才菠,結(jié)果婚禮上茸时,老公的妹妹穿的比我還像新娘。我一直安慰自己赋访,他們只是感情好可都,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚓耽,像睡著了一般渠牲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上步悠,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天签杈,我揣著相機(jī)與錄音,去河邊找鬼鼎兽。 笑死答姥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谚咬。 我是一名探鬼主播鹦付,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼择卦!你這毒婦竟也來了敲长?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤互捌,失蹤者是張志新(化名)和其女友劉穎潘明,沒想到半個(gè)月后行剂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秕噪,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年厚宰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腌巾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铲觉,死狀恐怖澈蝙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撵幽,我是刑警寧澤灯荧,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站盐杂,受9級特大地震影響逗载,放射性物質(zhì)發(fā)生泄漏哆窿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一厉斟、第九天 我趴在偏房一處隱蔽的房頂上張望挚躯。 院中可真熱鬧,春花似錦擦秽、人聲如沸码荔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缩搅。三九已至,卻和暖如春触幼,著一層夾襖步出監(jiān)牢的瞬間誉己,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工域蜗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巨双,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓霉祸,卻偏偏與公主長得像筑累,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子丝蹭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容