Redis學習筆記 事務和鎖

2021-10-25 18:27:23 字數 836 閱讀 1176

本文是自己的學習筆記,學習資料如下

b站狂神說redis教程

2、redis實現樂觀鎖

redis事務不保證原子性,本質是一組命令的集合。就是將一組命令放進乙個佇列裡一條條執行,發生錯誤就觸發錯誤處理機制,之前已經執行成功的命令也不會回退。同時也說明,事務可以保證一組命令能順序執行。

redis可以通過watch關鍵字來實現樂觀鎖。

watch關鍵字的語法是watch key,可以有多個key。表示對乙個key進行監控(可以同時監控多個key),實際上可以理解成對這個key加上乙個版本號記錄。與此相反的unwatch是放棄監視,放棄監視不能指定,只能放棄所有監視。

watch要和事務一起使用。當watch的作用就是監聽乙個key後,就會影響緊接著的乙個事務。如果在這個事務執行之前,watch的key有過寫入操作(版本號變化),那麼這個事務就注定提交失敗。

watch影響的只有緊接著watch語句的乙個事務,後面的事務不會被watch影響。

下面是示例,左邊的標籤頁會watchk1執行事務,右邊的標籤頁模擬一條新縣城,在左標籤頁執行執行緒之前對k1寫入。然後左標籤的事務執行失敗,事務中的k3沒有存進去。

由上可以看出,redis中watch關鍵字本身就具有樂觀鎖的性質,可以直接用watch實現樂觀鎖。

redis學習筆記 事務

事務是乙個單獨的隔離操作 事務中的所有命令都會序列化 按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。事務是乙個原子操作 事務中的命令要麼全部被執行,要麼全部都不執行。注 對於redis事務是否是原子性可以參考我個人挺支援作者觀點。命令說明 multi 標記乙個事務塊的開始...

《Redis原始碼學習筆記》事務

url 原始碼學習筆記 文章列表 url redis中的事務,提供了一種 b 將多個命令打包並且一次執行 b 的方式 當使用者輸入multi命令時,就開啟了客戶端redis multi選項,客戶端從 非事務狀態 切換到 事務狀態 img 之後客戶端執行的所有命令都不會被redis立即執行,而是放到客...

MySQL學習筆記 事務隔離與鎖

可重複讀級別下,在事務執行期間,即使其他事務修改了資料,該事務看到的仍然跟啟動是看到的一樣。但是,如果乙個事務要更新一行資料,這時剛好有另乙個事務擁有這一行的行鎖,那本事務就會進入鎖等待狀態。問題 該事務獲取到行鎖,要更新資料時,這時候,它讀的資料值是什麼呢?答 更新資料的時候,都是先讀後寫,這個讀...