什麼是事務?簡單點說事務就是一次批處理,給定指令碼一下性執行完畢
什麼是事務
可以一次執行多個命令,本質是一組命令的集合。乙個事務中的所有命令都會序列化,按順序地序列化執行而不會被其它命令插入,就像排隊一樣,不許加塞。 就是指排好隊,按序一次執行一大堆命令
作用乙個佇列中,一次性、順序性、排他性的執行一組命令
命令取消事務
discard
執行所有事務塊的命令
exec
開啟事務,標記乙個事務的開始
multi
取消watch命令對所有key的監視
unwatch
監視乙個或多個key,如果在事務執行之前這個key被其他命令修改,那麼事務將被打斷
watch key [key...
...]
特點
正常情況,multi正常開啟事務,然後輸入一條一條的set、get命令入隊,最後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 k1
queued
127.0
.0.1
:6379
> exec
1) ok
2) ok3)
"v1"
127.0
.0.1
:6379
>
放棄事務,在exec之前輸入discard,事務就會被放棄,事務的命令都不會執行
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
> discard
ok127.0
.0.1
:6379
>
全體連坐,要麼全部成功,要麼全部失敗,只要有乙個失敗,就全部不執行。限於在入隊時就報錯。
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
> setget k1 v1
(error) err unknown command 'setget'
127.0
.0.1
:6379
> exec
(error) execabort transaction discarded because of previous errors.
127.0
.0.1
:6379
>
冤頭債主,誰犯錯誰承擔,如果入隊沒有報錯,那麼在執行時,誰報錯誰失敗,不會影響別的命令
127.0
.0.1
:6379
> keys *1)
"k2"2)
"k1"
127.0
.0.1
:6379
> multi
ok127.0
.0.1
:6379
> incr k1
queued
127.0
.0.1
:6379
> set k3 v3
queued
127.0
.0.1
:6379
> exec1)
(error) err value is not an integer or out of range
2) ok
127.0
.0.1
:6379
> get k3
"v3"
127.0
.0.1
:6379
>
watch監控,類似於樂觀鎖,如果但是乙個key,那麼如果有另乙個客戶端修改監視的key之後,本客戶端再修改就會失敗,只能重新監視,然後執行
127.0
.0.1
:6379
> keys *1)
"dbt"2)
"balance"
127.0
.0.1
:6379
> get balance
"100"
127.0
.0.1
:6379
> watch balance
ok127.0
.0.1
:6379
> set balance 500
ok127.0
.0.1
:6379
> multi
ok127.0
.0.1
:6379
> decrby balance 10
queued
127.0
.0.1
:6379
> incrby dbt 10
queued
127.0
.0.1
:6379
> exec
(nil)
127.0
.0.1
:6379
>
悲觀鎖
悲觀地認為一定會有人改自己的資料,所以每次操作之前把整張表都鎖上
樂觀鎖行鎖,每次拿資料都認為別人不會修改,但是有乙個版本號
exec,discard,unwatch命令都會清除連線中的所有監視。
Redis 事務 詳解
redis 事務可以一次執行多個命令,並且帶有以下兩個重要的保證 1 事務是乙個單獨的隔離操作 事務中的所有命令都會序列化 按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷 2 事務是乙個原子操作 事務中的命令要麼全部被執行,要麼全部都不執行 乙個事務從開始到執行會經歷以下三...
mysql事務隔離級別詳解 事務的隔離級別詳解
事務的隔離級別 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。問題的提出 資料庫是要被廣大客戶所共享訪問的,那麼在資料庫操作過程中很可能出現以下幾種不確定情況。更新丟失 兩個事務都同時更新一行資料,乙個事務對資料的更新把另乙個事務對資料的更新覆蓋了。這是因為系統沒有執行任何的...
如何理解事務?
一件事從開始發生到結束的整個過程。在mysql裡事務是一組不可被分割執行的sql語句集合,如果有必要,可以撤銷。這樣可以確保資料的一致性。rollback事物回滾,則事物執行失敗,保證了資料安全。mysql中預設sql語句會自動commit到資料庫,在預設情況下mysql開啟的是autocommit...