redis學習筆記 事務

2021-10-09 13:23:44 字數 1461 閱讀 1142

事務是乙個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。

事務是乙個原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。

注:對於redis事務是否是原子性可以參考我個人挺支援作者觀點。

命令說明

multi

標記乙個事務塊的開始。

exec

執行所有事務塊內的命令。

discard

取消事務,放棄執行事務塊內的所有命令。

watch key [key …]

監視乙個(或多個) key ,如果在事務執行

之前這個(或這些) key 被其他命令所改動,

那麼事務將被打斷。

unwatch

取消 watch 命令對所有 key 的監視。

事務在執行 exec 之前,入隊的命令可能會出錯。比如說,命令可能會產生語法錯誤(引數數量錯誤,引數名錯誤,等等),或者其他更嚴重的錯誤,比如記憶體不足。

伺服器會對命令入隊失敗的情況進行記錄,並在客戶端呼叫 exec 命令時,拒絕執行並自動放棄這個事務。

事務在執行 exec 之後,命令發生錯誤。

至於那些在 exec 命令執行之後所產生的錯誤, 並沒有對它們進行特別處理: 即使事務中有某個/某些命令在執行時產生了錯誤, 事務中的其他命令仍然會繼續執行

引用官方的說明

watch 命令可以為 redis 事務提供 check-and-set (cas)行為。

被 watch 的鍵會被監視,並會發覺這些鍵是否被改動過了。 如果有至少乙個被監視的鍵在 exec 執行之前被修改了, 那麼整個事務都會被取消, exec 返回nil-reply來表示事務已經失敗。

watch 命令可以被呼叫多次。 對鍵的監視從 watch 執行之後開始生效, 直到呼叫 exec 為止。

unwatch 命令來取消目前對鍵的監視。

單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。

沒有隔離級別的概念:佇列中的命令沒有提交之前都不會實際的被執行,因為事務提交前任何指令都不會被實際執行,也就不存在」事務內的查詢要看到事務裡的更新,在事務外查詢不能看到」這個讓人萬分頭痛的問題。

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

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

Redis學習筆記 事務和鎖

本文是自己的學習筆記,學習資料如下 b站狂神說redis教程 2 redis實現樂觀鎖 redis事務不保證原子性,本質是一組命令的集合。就是將一組命令放進乙個佇列裡一條條執行,發生錯誤就觸發錯誤處理機制,之前已經執行成功的命令也不會回退。同時也說明,事務可以保證一組命令能順序執行。redis可以通...

MySQL學習筆記 事務

事務是用來保證一組資料庫的操作,要麼全部成功,要麼全部失敗 應用場景較多 如銀行轉賬,訂票等。mysql的事務是在引擎層支援的,原生的myisam不支援,因此主流使用innodb引擎。原子性顧名思義,不可分割,要麼所有指令都成功,要麼所有指令都失敗 一致性事務開始前和事務結束後,資料庫的狀態都是正常...