/*** * 事務單元:
* 商品建立個gmt_modified的索引
* 讀取一行記錄
* 寫一行記錄,同時更新這行記錄的所有索引
* 刪除整個表
* * 只要傳送了乙個請求過去就是個事務單元
* * 以begin ... commit 之間是個大的事務單元
* * two phase lock(2pl)
* 先讀再寫
* begin trx;
* read from a(locka)
* read from b(lockb)
* a-100
* b+100
* commit(unlocka,unlockb)
* * 現在主要是mvcc加上一些鎖的實現....
* ** * 死鎖擴充套件 u鎖
* * 讀寫鎖與死鎖:
* 1:事務1 read from a
* 2.事務2 read from a
* 3.事務1 -100 讀鎖公升級為寫鎖,但是不成功,因為讀還沒完成,等待事務2讀完成
* 4.事務2 -100 讀鎖公升級為寫鎖,但是不成功,因為兩個讀還沒完成,等待事務1讀完成
* * trx1 申請a讀鎖成功
* trx2 申請a讀鎖成功
* trx1 申請a讀鎖公升級- 等待trx2讀鎖釋放
* trx2 申請a讀鎖公升級為寫鎖 - 等待trx1讀鎖釋放
* 就發生了死鎖了
* ** update set a=a-1 where id=100
* 併發多次發生,很可能發生死鎖
* 1.先找到id=100的資料.此時會加讀鎖
* 2.取出資料,減去1,再放回去.此時是寫鎖
* 對應兩個原子的事務操作....
* ** 更新鎖(u鎖)
* 會把上面的update的 讀鎖公升級為寫鎖,就只剩下乙個寫鎖了,其他的也是寫鎖,就會發生等待...不會發生死鎖了
* ** * mvcc:寫寫能並行嗎?
* 針對讀多寫少的場景優化
* 並行度能達到或超過讀未提交,而隔離級別很高
* * 寫寫並行?
* 樂觀鎖併發方案:
* 讓版本低的併發更新回滾
* 優勢:併發低時效能好
* 代價:併發高時失敗率高,需要不斷重試
* ** */
Redis事務 事務鎖
一旦成功所有的成功,乙個失敗,所有一些列連續動作都失敗 事務的基本操作 注意 加入事務的命令暫時到任務佇列中,並沒有立即執行,只有執行exec命令才開始執行事務定義過程中發現問題,怎麼辦?discard 事務的工作流程 事務的注意事項 手動進行事務回滾 業務場景1 業務分析 基於特定條件的事務執行 ...
索引 事務 鎖
索引 一 索引的簡介 1.什麼是索引?概念 索引是用於快速找到記錄的一種資料結構,索引優化應該是對查詢效能優化最有效的手段了 索引的本質 索引是資料結構 可以簡單理解為 排好序的快速查詢資料結構 加速查詢 2.為什麼使用索引?簡單理解 優化查詢速度 索引優化應該是對查詢效能優化最有效的手段了,善用索...
mysql事務與鎖機制 mysql事務與鎖機制
在併發下事務會容易出現的一些問題 資料更新丟失 兩個事務同時操作一條資料,乙個事務因為異常導致資料更新丟失 髒讀 乙個失誤開始讀取了某行資料,另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾。不可重複讀 乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的...