Redis事物

和其他SQL事務一樣,Redis事務也是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。事務是一個原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。
Reidis的事務的三個階段是:
開始事務——>命令入隊——>執行事物

Redis事務命令中

1、Multi 命令用於標記一個事務塊的開始。

2、事務塊內的多條命令會按照先後順序被放進一個隊列當中,最後由 EXEC 命令原子性(atomic)地執行。

3、Discard 命令用於取消事務,放棄執行事務塊內的所有命令。

下例是一個事務由開始到執行完成:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a a
QUEUED
127.0.0.1:6379> get a
QUEUED
127.0.0.1:6379> sadd aset c c++ java
QUEUED
127.0.0.1:6379> smembers aset
QUEUED
127.0.0.1:6379> exec
1) OK
2) "a"
3) (integer) 3
4) 1) "java"
   2) "c++"
   3) "c"
事務由開始到取消:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set b b
QUEUED
127.0.0.1:6379> discard
OK

4、Watch 命令用於監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷。

通俗的說就是我監視一個字段或者列表什麼的,然後我在事務裏要修改這個字段,但是在我事務執行之前,這個字段或者列表被另一個客戶端修改了,那麼我這個事務就無法進行操作,因爲裏面的值已經變了,所以事務被打斷。

例子如下:

127.0.0.1:6379> watch a
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a aaaa
QUEUED

(在最後執行之前,另一個客戶端有人修改了a 的值:

127.0.0.1:6379> set a bbbbb
OK)

然後我這邊開始執行我的事務:

127.0.0.1:6379> exec
(nil)

如上結果就是watch所起到的作用。

5、Unwatch 命令用於取消 WATCH 命令對所有 key 的監視。

unwatch



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章