概述
鍵空間通知使得客戶端可以通過訂閱頻道或模式, 來接收那些以某種方式改動了 Redis 數據集的事件。如Redis數據庫中鍵的過期事件也是通過訂閱功能實現。本文主要基於Azure PaaS Redis演示相關功能的具體實現。
配置
因為開啟鍵空間通知功能需要消耗一些 CPU , 所以在默認配置下, 該功能處於關閉狀態。因為Azure Redis屏蔽了部分指令,不能直接使用cli指令設置notify-keyspace-events參數,目前可以通過Azure Portal管理門戶直接設置。注意: 基本版的Redis還不支持設置該參數。
操作演示
pub/sub
-
使用Azure Console發布消息
-
使用Cli工具訂閱消息(注意使用cli連接Azure redis需要打開6379端口)
sub expired key event
-
設置帶有過期時間的key
-
訂閱過期key事件
注意
Redis 使用以下兩種方式刪除過期的鍵:
1、當一個鍵被訪問時,程序會對這個鍵進行檢查,如果鍵已經過期,那么該鍵將被刪除。
2、底層系統會在后台漸進地查找並刪除那些過期的鍵,從而處理那些已經過期、但是不會被訪問到的鍵。
當過期鍵被以上兩個程序的任意一個發現、 並且將鍵從數據庫中刪除時, Redis 會產生一個 expired 通知。
Redis 並不保證生存時間(TTL)變為 0 的鍵會立即被刪除: 如果程序沒有訪問這個過期鍵, 或者帶有生存時間的鍵非常多的話, 那么在鍵的生存時間變為 0 , 直到鍵真正被刪除這中間, 可能會有一段比較顯著的時間間隔。