Redis事務

 概念

和衆多其它數據庫一樣,Redis作爲NoSQL數據庫也同樣提供了事務機制。在Redis中,multi/exec/discard/這三個命令是我們實現事務的基石。

redis事務特徵

        1、  在事務中的所有命令都將會被串行化的順序執行,事務執行期間,Redis不會再爲其它客戶端的請求提供任何服務,從而保證了事物中的所有命令被原子的執行

        2、  和關係型數據庫中的事務相比,Redis事務中如果有某一條命令執行失敗,其後的命令仍然會被繼續執行

        3、  我們可以通過MULTI命令開啓一個事務,有關係型數據庫開發經驗的人可以將其理解爲"BEGIN TRANSACTION"語句。在該語句之後執行的命令都將被視爲事務之內的操作,最後我們可以通過執行EXEC/DISCARD命令來提交/回滾該事務內的所有操作。這兩個Redis命令可被視爲等同於關係型數據庫中的COMMIT/ROLLBACK語句。

4、  在事務開啓之前,如果客戶端與服務器之間出現通訊故障並導致網絡斷開,其後所有待執行的語句都將不會被服務器執行。然而如果網絡中斷事件是發生在客戶端執行EXEC命令之後,那麼該事務中的所有命令都會被服務器執行。

5、  當使用Append-Only模式時,Redis會通過調用系統函數write將該事務內的所有寫操作在本次調用中全部寫入磁盤。然而如果在寫入的過程中出現系統崩潰,如電源故障導致的宕機,那麼此時也許只有部分數據被寫入到磁盤,而另外一部分數據卻已經丟失。Redis服務器會在重新啓動時執行一系列必要的一致性檢測,一旦發現類似問題,就會立即退出並給出相應的錯誤提示。此時,我們就要充分利用Redis工具包中提供的redis-check-aof工具,該工具可以幫助我們定位到數據不一致的錯誤,並將已經寫入的部分數據進行回滾。修復之後我們就可以再次重新啓動Redis服務器了。

命令解釋

        1. multi:開啓事務用於標記事務的開始,其後執行的命令都將被存入命令隊列,直到執行EXEC時,這些命令纔會被原子的執行,類似與關係型數據庫中的:begin transaction

        2. exec:提交事務,類似與關係型數據庫中的:commit

        3. discard:事務回滾,類似與關係型數據庫中的:rollback


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