事務的本質:一組命令一塊兒執行,乙個事務中的所有命令都會被序列化:在事務執行的過程中,都會按順序執行
一次性、順序性、排他性!執行一系列命令!
---- 佇列 set
setset ----
redis單條命令保證原子性,但是事務不保證原子性
redis沒有事務隔離級別的概念
所有的命令在事務中,並沒有直接被執行,只有發起執行命令的時候才會執行!exec
redis的事務:
正常執行事務
127.0.0.1:6379[1]
> multi # 開啟事務
ok127.0.0.1:6379[1]
> mset huang:name huang huang:ago 20 huang:*** man
queued
127.0.0.1:6379[1]
> mget huang:name huang:ago huang:***
queued
127.0.0.1:6379[1]
>
exec
# 執行命令
okhuang
20man
取消事務
127.0.0.1:6379[1]
> multi # 開啟事務
ok127.0.0.1:6379[1]
>
set k4 v4
queued
127.0.0.1:6379[1]
> discard # 取消事務
ok127.0.0.1:6379[1]
> get k4 # 不執行
(nil)
錯誤編譯型異常(命令有錯)
執行時異常127.0.0.1:6379[1]
> multi
ok127.0.0.1:6379[1]
>
set huang:name 黃
queued
127.0.0.1:6379[1]
> get huang:name
queued
127.0.0.1:6379[1]
>
set huang:*** man huang:ago 20
queued
127.0.0.1:6379[1]
> get huang:*** huang:ago # mget,所以錯了,報錯!
err wrong number of arguments for
'get'
command
127.0.0.1:6379[1]
> mget huang:*** huang:ago # 事務會繼續
queued
127.0.0.1:6379[1]
>
exec
# 執行的時候===所有命令===無法執行成功
execabort transaction discarded because of previous errors.
127.0.0.1:6379[1]
>
set k1 v1
ok127.0.0.1:6379[1]
> multi
ok127.0.0.1:6379[1]
> incr k1 # 字串,沒辦法自增
queued
127.0.0.1:6379[1]
>
set k2 v2
queued
127.0.0.1:6379[1]
>
set k3 v3
queued
127.0.0.1:6379[1]
> get k3
queued
127.0.0.1:6379[1]
>
exec
# 雖然有一條命令報錯了,但是後面的命令依然執行成功!!
1)(error) err value is not an integer or out of range
2) ok
3) ok
4)"v3"
Redis 基本的事務操作
事務有 a c i d 原則 redis事務本質 一組命令的集合!乙個事務中的所有命令都會被序列化,在事務執行過程中,會按照順序執行!一次性 順序性 排他性,執行一系列的命令 redis事務沒有隔離級別的概念!所有的命令在事務中,並沒有直接被執行!只有發起執行命令的適合才會執行!exec redis...
(八)Redis事務與連線操作
事務 multi 標記乙個事務塊的開始。事務塊內的多條命令會按照先後順序被放進乙個佇列當中,最後由exec命令原子性地執行 exec 執行所有事務塊內的命令 descard 取消事務,放棄執行事務塊內的所有命令 watch 監視乙個 或多個 key,如果在事務執行之前,這個 或這些 key被其他命令...
Redis的基本事務操作
事務 redis事務本質 一組命令的集合!乙個事務中的所有命令都會被序列化,在事務執行過程中,會按順序執行 一次性 順序性 排他性!執行一系列的命令 佇列 set set set 執行 redis事務沒有隔離級別的概念 所有的命令在事務中,並沒有直接被執行,只有發起執行命令的時候才會執行!exec ...