Redis學習 11 事物講解

2022-06-16 06:06:09 字數 1951 閱讀 7371

事物的本質:一組命令的集合!乙個事物中的所有命令都會被序列化,在事物執行過程中,會按照順序執行!

特點:一次性、順序性、排他性!執行一系列的命令!

redis事物沒有隔離級別的概念!

所有的名令在事物中,並沒有直接被執行!只有發起執行命令的時候才會執行! exec

redis單條命令是保證原子性的,但事物不保證原子性

redis的事務步驟:

開啟事務(multi)

命令入隊()

執行事務(exec)

127.0.0.1:6379>multi  #開啟事務

ok127.0.0.1:6379> set

k1 v1 #命令入隊

queued

127.0.0.1:6379> set

k2 v2

queued

127.0.0.1:6379> get

k2queued

127.0.0.1:6379> set

k3 v3

queued

127.0.0.1:6379>exec #執行事務(注意,這個事務執行完後就消失了,需要事務的話需要重新開啟)

1) ok

2) ok

3) "v2"

4) ok

127.0.0.1:6379>multi  #再次開啟事務

ok127.0.0.1:6379>

127.0.0.1:6379> set k1 v1

queued

127.0.0.1:6379> set k2 v2

queued

127.0.0.1:6379> set k4 v4

queued

127.0.0.1:6379>discard  #放棄事務,放棄後這個事務中的所有命令都會失效

ok127.0.0.1:6379> get k4  #所以k4為空

(nil)

編譯時異常的案例

127.0.0.1:6379>multi

ok127.0.0.1:6379> set

k1 v1

queued

127.0.0.1:6379> set

k2 v2

queued

127.0.0.1:6379> set

k3 v3

queued

127.0.0.1:6379>getset k3 #故意寫乙個錯誤的命令

(error) err wrong number of arguments

for'

getset

'command #編譯時異常

127.0.0.1:6379> set

k4 v5

queued

127.0.0.1:6379>exec #執行事務,發現報錯

(error) execabort transaction discarded because of previous errors.

127.0.0.1:6379> get

k1 #所有的命令都未執行

(nil)

執行時異常的案例

127.0.0.1:6379> setk1 v1

ok127.0.0.1:6379>multi

ok127.0.0.1:6379> incr k1 #對乙個字串+1,編譯時沒有異常

queued

127.0.0.1:6379> setk2 v2

queued

127.0.0.1:6379> getk2

queued

127.0.0.1:6379>exec

1) (error) err value is not an integer or outof range #執行時丟擲異常,但不影響其它語句的執行

2) ok

3) "v2"

redis學習 事物,生存時間

事物 1 multi exec 2 錯誤處理 語法錯誤可以檢測到,執行錯誤無法檢測,即使事物裡一條命令出現了語法錯誤,事物裡其他的命令依然會繼續執行 3 watch 檢測鍵值被修改後阻止之後的乙個事物的執行,並不能保證其他客戶端不修改這個鍵值 unwatch可以取消監控 生存時間 expire ke...

Redis學習筆記三 redis事物及鎖的應用

redis和mysql一樣,也支援簡單的事物,並且redis還可以對key進行加鎖,防止同時對某一key操作而導致資料錯誤 一 redis與mysql事物比較 mysql redis 開啟語句 start transaction muitl 事物語句 普通sql 普通redis命令 執行失敗 rol...

redis 管道和事物

redis是單執行緒的,一次請求伺服器,請求發出後,如果伺服器響應沒有回來,就一直阻塞。在傳送下乙個請求 redis管道,就是吧命令 都傳送了。不關心是否有響應。然後最後集中去接收響應結果 管道 不會接收其他非管道命令。redis事物。muti mutiget exec watch監視key 基於c...