Redis學習筆記(五) Redis的事務

Redis的事務定義

  • Redis事務是一個單獨的隔離操做:事務中的全部命令都會序列化、按順序地執行。事務在執行的過程當中,不會被其餘客戶端發送來的命令請求所打斷。
  • Redis事務的主要做用就是串聯多個命令防止別的命令插隊

簡單來講,redis的事務就是將多個事務串聯起來,統一交給服務器執行,統一返回結果redis

 

Multi(開啓事務)、Exec(執行事務)、discard(取消事務)

  1. 從輸入Multi命令開始,輸入的命令都會依次進入命令隊列中,但不會執行,至到輸入Exec後,Redis會將以前的命令隊列中的命令依次執行。
  2. 組隊的過程當中能夠經過discard來放棄組隊。

事務中的錯誤處理

  1. 組隊中某個命令出現了報告錯誤,執行時整個的全部隊列會都會被取消。

2.若是執行階段某個命令報出了錯誤,則只有報錯的命令不會被執行,而其餘的命令都會執行,不會回滾數據庫

事務衝突問題

  • Ø三個請求
    •     一個請求想給金額減8000
    •     一個請求想給金額減5000
    •     一個請求想給金額減1000

經過事務解決問題服務器

悲觀鎖(Pessimistic Lock), 顧名思義,就是很悲觀,每次去拿數據的時候都認爲別人會修改,因此每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會block直到它拿到鎖。傳統的關係型數據庫裏邊就用到了不少這種鎖機制,好比行鎖,表鎖等,讀鎖,寫鎖等,都是在作操做以前先上鎖spa

樂觀鎖(Optimistic Lock), 顧名思義,就是很樂觀,每次去拿數據的時候都認爲別人不會修改,因此不會上鎖,可是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可使用版本號等機制。樂觀鎖適用於多讀的應用類型,這樣能夠提升吞吐量。Redis就是利用這種check-and-set機制實現事務的。blog

Redis事務的使用

WATCH key[key….]

unwatch

取消 WATCH 命令對全部 key 的監視。若是在執行 WATCH 命令以後, EXEC 命令或 DISCARD 命令先被執行了的話,那麼就不須要再執行 UNWATCH 了。隊列

三特性

  • 單獨的隔離操做

事務中的全部命令都會序列化、按順序地執行。事務在執行的過程當中,不會被其餘客戶端發送來的命令請求所打斷。事務

  • 沒有隔離級別的概念

隊列中的命令沒有提交以前都不會實際的被執行,由於事務提交前任何指令都不會被實際執行,也就不存在「事務內的查詢要看到事務裏的更新,在事務外查詢不能看到」這個讓人萬分頭痛的問題 序列化

  • 不保證原子性

Redis同一個事務中若是有一條命令執行失敗,其後的命令仍然會被執行,沒有回滾請求

相關文章
相關標籤/搜索