2023-01-29 一、redis事務與樂觀鎖相關命令 1、redis事務 (1)redis事務的含義 redis事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序執行。事務在執行過程中,不會被其他客戶端送來的命令請求所打斷。 (2)redis事務的作用 redis事務的主要作用就是串聯 ...
2023-01-29
一、redis事務與樂觀鎖相關命令
1、redis事務
(1)redis事務的含義
redis事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序執行。事務在執行過程中,不會被其他客戶端送來的命令請求所打斷。
(2)redis事務的作用
redis事務的主要作用就是串聯多個命令防止別的命令插隊。
2、multi、exec、discard
(1)multi:組隊命令,之後使用“set key value”的命令
(2)exec:將輸入的“set key value”的命令依次進行執行
(3)discard:放棄組隊
3、悲觀鎖(Pessimistic Lock)
即每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣其他人想拿這個數據就會block直到它拿到鎖。
傳統的關係型資料庫裡面就用到了很多這個鎖機制,比如行鎖、表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。
4、樂觀鎖(Optimistic Lock)
即每次去拿數據的時候都認為別人不會修改,所以不會上鎖,單是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可以使用版本號等機制。
樂觀鎖使用於多讀的應用類型,這樣可以提高吞吐量。Redis就是利用這種check-and-set機制實現事務的。
5、watch key
在執行multi之前,先執行watch key1[key2],可以監視一個(或多個)key,如果在事務執行之前這個(或這些)key被其他命令所改動,那麼事務將被打斷。
5、redis事務三特性
(1)單獨的隔離操作
事務中的所有命令都會序列化、按順序地執行。事務在執行過程中,不會被其他客戶端發送來的命令請求所打斷。
(2)沒有隔離級別的概念
隊列中的命令沒有提交之前都不會被執行,因為事務提交前任何指令都不會被實際執行。
(3)不保證原子性
事務中如果有一條命令執行失敗,其他命令仍然會被執行,沒有回滾。
二、應用場景
1、使用樂觀鎖解決超賣問題。
2、使用連接池解決超時問題
3、使用LUA腳本解決庫存遺留問題