redis知識盤點【柒】_redis補遺
阿新 • • 發佈:2018-12-25
系列文章:
本文將之前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來終止事務執行。釋出訂閱
redis提供了釋出訊息、訂閱頻道、取消訂閱以及按照模式訂閱和取消訂閱等命令。釋出訊息:publish channel message訂閱訊息:subscribe channel [channel ... ]取消訂閱:unsubscribe channel [channel ... ]模糊匹配:psubscribe/punsubscribe channel [channel ... ]檢視活躍的訂閱:pubsub channels [pattern]檢視頻道訂閱數:pubsub numsub [channel ..]記憶體管理
redis通過控制記憶體上限和回收策略來實現記憶體管理。redis預設無限使用伺服器記憶體,為防止極端情況下導致系統記憶體耗盡,建議所有redis伺服器都設定maxmemory。具體命令語句為:config set maxmemory 2GB
redis採用惰性刪除(當客戶端查詢到設定了過期時間的鍵時再做刪除操作,缺點是可能導致記憶體洩漏)和定時任務刪除機制(預設每秒執行10次,根據鍵的過期比例、使用快慢兩種速率模式回收鍵)來實現過期鍵的記憶體回收。關於記憶體溢位控制策略,redis支援6種策略,由config set maxmemory-policy [policy]命令配置:
2.volatile-lru:根據LRU演算法刪除設定了超時屬性(expire)的鍵,直到騰出足夠空間為止。如果沒有可刪除的鍵物件,回退到noeviction策略。
3.allkeys-lru:根據LRU演算法刪除鍵,不管資料有沒有設定超時屬性,直到騰出足夠空間為止。
4.allkeys-random:隨機刪除所有鍵,直到騰出足夠空間為止。5.volatile-random:隨機刪除過期鍵,直到騰出足夠空間為止。6.volatile-ttl:根據鍵值物件的ttl屬性,刪除最近將要過期資料。如果沒有,回退到noeviction策略。