Redis的事務講解


Redis事務的概念

是什么: 可以一次執行多個命令,本質是一組命令的集合。一個事務中的所有命令都會序列化,按順序串行化的執行而不會被其他命令插入

能干嘛: 一個隊列中,一次性、順序性、排他性的執行一系列命令 (要和pipeline區分開)
 
Redis其實是部分支持事務,但是事務的錯誤模式並不統一

 

使用方法

常用命令

 

正常開啟Redis事務

 

放棄事務

 

事務的錯誤模式(一):全體連坐

 

事務的錯誤模式(二):冤頭債主

 

watch 監控

悲觀鎖:顧名思義很悲觀,每次去拿數據的時候都認為別人修改,所以每次在拿數據的時候都會上鎖,這樣如果中間有人想拿數據就會一直阻塞除非鎖被釋放獲取到鎖。傳統的關系型數據庫里,用到了很多種這種鎖機制,比如行鎖,表鎖,寫鎖等
 
樂觀鎖:顧名思義很樂觀,每次去拿數據的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可以使用版本號等機制。樂觀鎖適用於多讀的應用類型,這樣可以提高吞吐量

示例:

步驟一:初始化信用卡可用余額和欠額

 

步驟二:用watch監控,進行數據監控

 

步驟三:監控過程中,他人纂改

 
一旦EXEC命令執行,之前加的監控鎖就會取消
 
Watch指令,類似樂觀鎖,事務提交時,如果Key的值已被別的客戶端改變
比如某個list已被別的客戶端push/pop過了,整個事務隊列都不會被執行

 

小結

小結一:事務3階段

  • 開啟:以MULTI 開啟一個事務
  • 入隊:將多個命令入隊到事務中,接到這些命令不會立即執行,而是放到等待執行的事務隊列里面
  • 執行:由EXEC命令觸發事務
     

小結二:事務3特性

  • 單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。
  • 沒有隔離級別的概念:隊列中的命令沒有提交之前都不會實際的被執行,因為事務提交前任何指令都不會被實際執行,也就不存在”事務內的查詢要看到事務里的更新,在事務外查詢不能看到”這個讓人萬分頭痛的問題
  • 不保證原子性:redis同一個事務中如果有一條命令執行失敗,其后的命令仍然會被執行,沒有回滾


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM