五 Redis入門事務

2021-08-27 20:26:53 字數 1657 閱讀 2467

是什麼:可以一次執行多個命令,本質是一組命令的集合。乙個事務中的

所有命令都會序列化,按順序地序列化執行而不會被其它命令插入,不許加塞

能幹嘛:乙個佇列中,一次性、順序性、排他性的執行一系列命令

怎麼玩:

case1正常執行: 開啟 multi  執行一堆,例如set k1 v1  set k2 v2   提交 exec

case2放棄事務:開啟multi    執行一堆 ,例如set k1 11 set k2 22  執行discard     則此次操作不會生效 

case3全體連坐:開啟multi  執行一堆,例如 set k1 v1 ;set k2 v2; set k3 v3; getset k3(此處會報錯),set k4 v4 執行exec    不會提交,並且全部都不會提交    

case4冤頭債主:開啟multi  執行一堆,例如set k1 aa;set k2 22 ;set k3 33 ;incr k1 1(沒有報錯) ;set k4 v4  執行exec; 則除了incr k1 1這條沒執行其他都執行了,與全體連坐的區別就是乙個在執行時就報                             錯,乙個是執行是沒有報錯

case5watch監控:

悲觀鎖:悲觀鎖(pessimistic lock), 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型                                                 資料庫裡 邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖

樂觀鎖: 樂觀鎖(optimistic lock), 顧名思義,就是很樂觀,每次去拿資料的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個資料,可以使用版本                                               號等機制。樂觀鎖適用於多讀的應用型別,這樣可以提高吞吐量,

樂觀鎖策略:提交版本必須大於記錄當前版本才能執行更新

cas:

小結:1.watch指令,類似樂觀鎖,事務提交時,如果key的值已被別的客戶端改變,比如某個list已被別的客戶端push/pop過了,整個事務佇列都不會被執行

2.通過watch命令在事務執行之前監控了多個keys,倘若在watch之後有任何key的值發生了變化,exec命令執行的事務都將被放棄,同時返回                                              nullmulti-bulk應答以通知呼叫者事務執行失敗

三階段:開啟:以multi開始乙個事務

入隊:將多個命令入隊到事務中,接到這些命令並不會立即執行,而是放到等待執行的事務佇列裡面

執行:由exec命令觸發事務

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

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

3.不保證原子性:redis同乙個事務中如果有一條命令執行失敗,其後的命令仍然會被執行,沒有回滾 (主要為全體連坐和冤頭債主直觀體現)

Redis筆記 五 之事務

redis 事務本質 一組命令的集合!乙個事務中的所有命令都會被序列化,在事務執行過程的中,會按 照順序執行!一次性 順序性 排他性!執行一些列的命令!佇列 set set set 執行 redis事務沒有沒有隔離級別的概念!所有的命令在事務中,並沒有直接被執行!只有發起執行命令的時候才會執行!ex...

Redis基礎 五 Redis事務 樂觀鎖

redis 事務可以一次執行多個命令,並且帶有以下三個重要的保證 乙個事務從開始到執行會經歷以下三個階段 我們可以理解redis事物為乙個指令碼,指令碼中如果出現編譯時錯誤 有錯 整條指令碼都不會被執行,並且並拋棄。指令碼中如果出現執行時錯誤 1 0等邏輯錯誤 除了該條指令其他的語句依然會被執行。1...

Redis基礎學習(五) Redis中的事務

redis的單條命令保證原子性,事務不保證原子性!事物的本質 一組命令的集合,乙個事務中所有的命令都會被序列化,在事務執行的過程中,會按照順序進行執行!事務的特性 一次性 單次 順序性 有順序 排他性 排除干擾 redis的事務沒有隔離級別的概念!所有的命令都在事務中,並沒有被立刻執行,只有在發起執...