十二、Redis的事務

寫在前面的話:讀書破萬卷,編碼若有神
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
一、Redis的事務
1.一、概述
Redis中的事務是一組命令的集合,被依次順序的執行,固然你能夠放棄事務的執行,那麼全部事務裏面的命令都不會執行。
1.二、關於Redis的事務有幾點說明
  1. Redis的事務僅僅是保證事務裏的操做會被連續獨佔的執行,由於是單線程架構,在執行完事務內全部指令前是不可能再去同時執行其餘客戶端的請求的
  2. Redis的事務沒有隔離級別的概念,由於事務提交前任何指令都不會被實際執行,也就不存在"事務內的查詢要看到事務裏的更新,在事務外查詢不能看到"這種問題了
  3. Redis的事務不保證原子性,也就是不保證全部指令同時成功或同時失敗,只有決定是否開始執行所有指令的能力,沒有執行到一半進行回滾的能力
1.三、Redis事務的基本過程
  • 發送一個事務的命令給redis,命令是multi
  • 依次發送要執行的命令給redis,redis接到這些命令,並不會當即執行,而是放到等待執行的事務隊列裏面
  • 發送執行事務的命令給redis,命令是exec
  • redis會保證一個事務內的命令依次執行,而不會被其它命令插入

1.四、Redis事務過程當中的錯誤處理
  • 若是任何一個命令語法有錯,redis會直接返回錯誤,全部的命令都不會執行

  • 若是是某個命令執行錯誤,那麼其它的命令仍然會正常執行,而後在執行後返回錯誤信息

  • redis不提供事務滾回的功能,開發者必須在事務執行出錯後,自行恢復數據庫狀態
1.五、事務操做的基本命令
  • multi : 設置事務開始
  • exec : 執行事務
  • discard : 放棄事務
  • watch : 監控鍵值,若是鍵值被修改或刪除,後面的一個事務就不會執行
  • unwatch : 取消watch
watch說明:
  1. redis使用watch來提供樂觀鎖定,相似於CAS(check-and-set)
  2. watch能夠被調用屢次
  3. 當EXEC被調用後,全部的以前被監視的鍵值會被取消監視,無論事務是否被取消或執行。而且當客戶端鏈接丟失的時候,全部東西都會被取消監視

相關文章
相關標籤/搜索