1. 程式人生 > >redis之事務管理

redis之事務管理

1.Redis的事務是什麼

在單個操作中可以執行一個或者一組命令。一個事務中的所有命令都會序列化,按順序地序列化執行而不會被其他命令插入,不許加塞。

特點:

(1)事務中的所有命令作為單個隔離操作並按順序執行。不可以在執行redis的事務中間向其他客戶端發起請求。

(2)不完全保證原子性,支援部分原子性,redis在同一個事務中,如果一條命令執行失敗,那麼其後的命令仍然會執行,卻不會回滾。

2.redis事務的命令

MULTI :開啟事務,一般返回ok,但是不代表一定成功,只是開啟了,好使不好使還不一定。



雖然放進去值了,但是返回的不是ok,是queue佇列,就是先加入佇列,行就存上,不行從佇列移除。所以可以做多個操作,然後放入佇列中,如圖。

EXEC :執行事務。如圖,可以批量執行,是設定值得就返回ok,獲取值得就取值。


DISCARD :放棄當前事務。


3.什麼是悲觀鎖和樂觀鎖

悲觀鎖:顧名思義就是採用悲觀的方式,我操作的時候防止萬一有人來操作,感覺有點像java中的同步鎖,synchronized似的,當前我操作,就把操作的物件鎖起來,誰都得等我完事再說。意思就是等我把鎖釋放了,別人才可以拿鎖再進來。

樂觀鎖:採用樂觀的方式,就是我操作的時候不一定會有人來吧,樂觀方式就是沒上鎖。別人也過來操作時,就會更新當前的版本號。結果我再去更新原資料時,發現已經不一樣了,那麼就會告訴我需要取出當前更新後最新的版本號,才會操作更新資料。

4.redis監控命令

WATCH  XXX :監控XXX(watch可以監控一個及多個鍵)。給XXX上鎖。watch這個命令類似於樂觀鎖,如果監控的key已經被修改了,那麼整個監控的事務佇列就不會繼續執行下去了。也就是watch監控的鍵,只要有一個發生了改變,那麼使用EXEC執行命令就會報出異常,讓你基於當前更新後最新的值去操作。

UNWATCH XXX:取消監控。

注意:在執行了exec和unwatch之後,之前加的watch監控鎖就會被消除了。