Redis學習筆記(3)

2022-09-11 05:21:13 字數 1249 閱讀 9376

本質:本質是一組命令的集合,所有的命令按照順序一次性、序列化地執行,不允許其他命令的加入。redis通過multi、exec、watch等命令來實現事務功能;在事務執行過程中,伺服器不會中斷事務而去執行其他客戶端命令(具有排他性)。但是redis的事務不支援原子性,因此redis對事務的支援是部分的。

階段:- 事務開始

- 命令入隊

- 事務執行

階段描述

事務開始:multi命令的執行標誌著事務的開始; multi命令可以將執行該命令的客戶端從非事務狀態切換至事務狀態。

命令入隊:當客戶端處於事務狀態時,輸入的命令不會立即執行,而是將命令入隊;服務端會維持乙個事務佇列,存放這些命令。

事務執行:當輸入exec命令後,事務被提交並且執行。如果放棄事務,則輸入discard命令即可,相關的命令將不會被執行。(事務提交時,相關的命令從前到後依次執行,不會被其他客戶端打斷)

注意事項:對於乙個事務所涉及的指令,如果是命令編譯出錯,則事務的所有命令都不會執行,而是返回錯誤資訊;如果命令編譯通過,但是有部分命令執行出錯,不會發生回滾,其他的命令將正常執行(如incr key,編譯正常,但如果key非數值則執行出錯,但該執行錯誤不會影響到其他正常的命令)。因此,redis中的事務不支援原子性,可能出現部分命令執行成功,部分命令執行失敗的現象。

watch(監控):watch命令相當於樂觀鎖,當事務被提交時,如果監控的key被其他的客戶端修改,則整個事務佇列裡的命令都不會被執行,會返回nil,顯示事務執行失敗。                  (即watch執行之後, exec執行之前, 有其他客戶端修改了監控的key值, 那麼當前客戶端的事務就會失敗。)

悲觀鎖:取資料時鎖定資料,從而獨佔了資料的使用權,其他使用者在此期間無法取資料,會處於阻塞狀態直到它獲得了該資料的鎖。悲觀鎖的實現,有表鎖、頁鎖等。

樂觀鎖:相比較於悲觀鎖,樂觀鎖是一種較為寬鬆的加鎖機制。取資料時不會鎖定資料,但是更新資料時會判斷資料是否被其他使用者更新了,如果發現資料被其他使用者更新,則放棄更新,並且重新取資料。樂觀鎖可以提高系統的吞吐量。樂觀鎖的實現,如版本控制方法,只有當提交的版本號大於當前資料的版本號,才可以對資料進行更新。

cas:在redis中,通過cas實現樂觀鎖。

含義:一種訊息通訊模式,pub傳送訊息,sub訂閱訊息。

命令:publish [channel] [message] 發布訊息。

subscribe [channel] 訂閱指定的訊息。

psubscribe [channel1] [channel2] ... 訂閱多個訊息;支援萬用字元。

Redis學習筆記3

redis 127.0.0.1 6379 command key name redis 127.0.0.1 6379 set runoobkey redis okredis 127.0.0.1 6379 get runoobkey redis 在以上例項中我們使用了set和get命令,鍵為runoo...

redis學習筆記3 其他功能

1.慢查詢分析 客戶端提交指令給redis並返回執行結果,這個過程包括如下幾個步驟 提交指令 命令排隊 執行命令 返回結果 而慢查詢只是統計執行命令的時間,因此沒有慢查詢並不代表客戶端沒有超時 慢查詢配置 slowlog log slower than 慢查詢閾值,即執行時間多長被定義成慢查詢 sl...

Redis系列學習筆記3 雜湊

儲存多個域值對。乙個雜湊由多個域值對 field value pair 組成,雜湊的域和值都可以是文字 整數 浮點數或者二進位制資料。同乙個雜湊裡面的每個域必須是獨一無 二 各不相同的,而域的值則沒有這一要求,換句話說,不同域的值可以是重複的。通過命令,使用者可以對雜湊執行設定域值對 獲取域的值 檢...