1. 程式人生 > >redis知識盤點【柒】_redis補遺

redis知識盤點【柒】_redis補遺

系列文章:


本文將之前redis系列文章中遺漏的知識點進行補充,大致分為pipeline事務釋出訂閱記憶體管理四個方面。

pipeline

pipeline(流水線)機制能將一組redis命令進行組裝,通過一次RTT(Round Trip Time,往返時間)傳輸給redis,再將這組redis命令的執行結果按順序返回給客戶端。和原生的批量命令相比:1.原生批量命令是原子的,而pipeline不是;2.原生批量命令是一個命令對應多個key,pipeline支援多個命令;3.原生批量命令是redis伺服器支援實現的,而pipeline需要伺服器和客戶端共同實現;

事務

redis提供了簡單的事務功能,將一組需要一起執行的命令放到multi和exec兩個命令之間。multi代表事務開始,exec命令代表事務結束,他們之間的命令是原子順序執行的。可用discard命令代替exec來終止事務執行。
錯誤處理機制:1.如果是命令語法錯誤,會導致整個事務無法執行;2.如果是執行時錯誤,redis不支援回滾功能,需要開發人員自行修復。

釋出訂閱

redis提供了釋出訊息、訂閱頻道、取消訂閱以及按照模式訂閱和取消訂閱等命令。釋出訊息:publish channel message訂閱訊息:subscribe channel [channel ... ]取消訂閱:unsubscribe channel [channel ... ]模糊匹配:psubscribe/punsubscribe channel [channel ... ]檢視活躍的訂閱:pubsub channels [pattern]檢視頻道訂閱數:pubsub numsub [channel ..]
需要注意:新開啟的訂閱客戶端無法接收到頻道之前的訊息,因為redis不會對釋出的訊息進行持久化。

記憶體管理

redis通過控制記憶體上限回收策略來實現記憶體管理。redis預設無限使用伺服器記憶體,為防止極端情況下導致系統記憶體耗盡,建議所有redis伺服器都設定maxmemory。具體命令語句為:
config set maxmemory 2GB

redis採用惰性刪除(當客戶端查詢到設定了過期時間的鍵時再做刪除操作,缺點是可能導致記憶體洩漏)和定時任務刪除機制(預設每秒執行10次,根據鍵的過期比例、使用快慢兩種速率模式回收鍵)來實現過期鍵的記憶體回收。關於記憶體溢位控制策略,redis支援6種策略,由config set maxmemory-policy [policy]命令配置:

1.noeviction:預設策略,不會刪除任何資料,拒絕所有寫入操作並返回客戶端錯誤資訊(error)OOM command not allowed when used memory,此時Redis只響應讀操作。

2.volatile-lru:根據LRU演算法刪除設定了超時屬性(expire)的鍵,直到騰出足夠空間為止。如果沒有可刪除的鍵物件,回退到noeviction策略。

3.allkeys-lru:根據LRU演算法刪除鍵,不管資料有沒有設定超時屬性,直到騰出足夠空間為止。

4.allkeys-random:隨機刪除所有鍵,直到騰出足夠空間為止。5.volatile-random:隨機刪除過期鍵,直到騰出足夠空間為止。6.volatile-ttl:根據鍵值物件的ttl屬性,刪除最近將要過期資料。如果沒有,回退到noeviction策略。