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...