redis事務(樂觀鎖,悲觀鎖)
阿新 • • 發佈:2021-08-07
Redis事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。
Redis事務的主要作用就是串聯多個命令防止別的命令插隊。
Redis事務三特性
- 單獨的隔離操作
事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。
- 沒有隔離級別的概念
佇列中的命令沒有提交之前都不會實際被執行,因為事務提交前任何指令都不會被實際執行
- 不保證原子性
事務中如果有一條命令執行失敗,其後的命令仍然會被執行,沒有回滾
開啟事務
multi
組隊階段可以新增redis語句
set k1 v1
set k1 v2
set k2 v1
執行事務(依次執行redis語句)
exex
刪除事務
discard
報錯情況有兩種
【組隊階段】某個命令出現了報告錯誤,執行時整個的所有佇列都會被取消。
如果【執行階段】某個命令報出了錯誤,則只有報錯的命令不會被執行,而其他的命令都會執行,不會回滾。
悲觀鎖通過鎖住資源,一個個挨著操作,避免發生執行緒安全問題(上鎖解鎖執行慢)
樂觀鎖(redis的事務會使用該鎖)(不會上鎖)通過在更新時會對比執行緒中的版本號與資料庫版本號,相同才接著執行,不同就不運行了,避免發生執行緒安全問題(適用於多讀的情況)