Redis事務、鎖


Redis事務、鎖的相關命令:MULTIEXECDISCARD和、WATCH

事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。
事務中的命令要麼全部被執行,要麼全部都不執行,執行但不保證執行成功

MULTI

MULTI 命令用於開啓一個事務,MULTI之後的命令將會被放到一個隊列中,返回QUEUED ,並沒有真正執行,當 EXEC命令被調用時, 所有隊列中的命令纔會被執行。

EXEC

EXEC命令會按順序執行隊列中的命令。
使用事務時可能會遇上以下兩種錯誤:

事務在執行 EXEC 之前,入隊的命令可能會出錯。比如說,命令可能會產生語法錯誤(參數數量錯誤,參數名錯誤,等等),或者其他更嚴重的錯誤,比如內存不足(如果服務器使用 maxmemory 設置了最大內存限制的話)。服務器會對命令入隊失敗的情況進行記錄,並在客戶端調用 EXEC 命令時,拒絕執行並自動放棄這個事務
命令可能在 EXEC 調用之後失敗。舉個例子,事務中的命令可能處理了錯誤類型的鍵,比如將列表命令用在了字符串鍵上面,諸如此類。即使事務中有某個/某些命令在執行時產生了錯誤,事務中的其他命令仍然會繼續執行

DISCARD

當執行 DISCARD 命令時, 事務會被放棄, 事務隊列會被清空, 並且客戶端會從事務狀態中退出。

WATCH

WATCH 命令可以爲 Redis 事務提供 check-and-set (CAS)行爲。被 WATCH 的鍵會被監視,並會發覺這些鍵是否被改動過了。 如果有至少一個被監視的鍵在 EXEC 執行之前被修改了, 那麼整個事務都會被取消, EXEC 返回nil-reply來表示事務已經失敗。EXEC、DISCARD 命令也會自動釋放鎖

UNWATCH

使用無參數的 UNWATCH 命令可以手動取消對所有鍵的監視。 對於一些需要改動多個鍵的事務, 有時候程序需要同時對多個鍵進行加鎖, 然後檢查這些鍵的當前值是否符合程序的要求。 當值達不到要求時, 就可以使用 UNWATCH 命令來取消目前對鍵的監視。

參考

http://www.redis.cn/topics/transactions.html

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