黑猴子的家 Redis 事務

2021-08-30 08:50:39 字數 3234 閱讀 4930

1、redis的事務定義

(1)redis事務是乙個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。

(2)redis事務的主要作用就是串聯多個命令防止別的命令插隊

2、multi、exec、discard

(1)正常情況

從輸入multi命令開始,輸入的命令都會依次進入命令佇列中,但不會執行,至到輸入exec後,redis會將之前的命令佇列中的命令依次執行。

組隊的過程中可以通過discard來放棄組隊。

ok(2)事務的錯誤處理一組隊中某個命令出現了報告錯誤,執行時整個的所有佇列會都會被取消

注:語法錯誤(3)事務的錯誤處理二如果執行階段某個命令報出了錯誤,則只有報錯的命令不會被執行,而其他的命令都會執行,不會回滾

注:邏輯錯誤3、為什麼要做成事務

想想乙個場景:

有很多人有你的賬戶,同時去參加雙十一搶購

事務衝突的問題

兩個請求

乙個請求想給金額減8000

乙個請求想給金額減5000

乙個請求想給金額減1000

悲觀鎖(pessimistic lock)

顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。

樂觀鎖(optimistic lock)

顧名思義,就是很樂觀,每次去拿資料的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個資料,可以使用版本號等機制。樂觀鎖適用於多讀的應用型別,這樣可以提高吞吐量。redis就是利用這種check-and-set機制實現事務的。

watch key [key ...] 是一種樂觀鎖,類似於標記版本號

在執行multi之前,先執行watch key1 [key2],可以監視乙個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷。

unwatch 取消樂觀鎖

取消 watch 命令對所有 key 的監視。

如果在執行 watch 命令之後, exec 命令或 discard 命令先被執行了的話,那麼就不需要再執行 unwatch 了。

4、事物三特性

(1)事務單獨的隔離操作不會被打斷

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

(2)利用樂觀鎖解決事務衝突問題

利用樂觀鎖機制淘汰同一時間點同一資料的所有操作,只保留最優先提交的任務。實際上就是去除了併發。

(3)不保證原子性

redis同乙個事務中如果有一條命令執行失敗,其後的命令仍然會被執行,沒有回滾

黑猴子的家 Redis 相關知識

1 redis埠6379從何而來 2 redis資料庫 預設資料庫 預設16個資料庫,類似陣列下標從0開始,初始預設使用0號庫 使用命令 select 來切換資料庫。如 select 8 統一密碼管理,所有庫都是同樣密碼,要麼都ok,要麼乙個也連線不上 切換資料庫 127.0.0.1 6379 se...

黑猴子的家 Redis 基本操作命令

1 查詢當前庫的所有鍵 127.0.0.1 6379 2 keys 2 判斷某個鍵是否存在 127.0.0.1 6379 2 exists k1 integer 1 注1表示true 0表示false3 檢視鍵的型別 127.0.0.1 6379 2 type k1 string4 刪除某個鍵 12...

黑猴子的家 Hadoop Checkpoint機制

fsimage和edit log合併的過程如下圖所示 其實這個合併過程是乙個很耗i o與cpu的操作,並且在進行合併的過程中肯定也會有其他應用繼續訪問和修改hdfs檔案。所以,這個過程一般不是在單一的namenode節點上進行從。如果hdfs沒有做ha的話,checkpoint由secondname...