簡體   English   中英

如何過濾 Redis 鍵空間通知

[英]How to filter Redis Keyspace notifications

我想弄清楚如何正確使用 Redis 中的鍵事件通知系統,使用Azure Cache for RedisStackExchange.Redis package。

按照來自不同地方的文檔,我已經能夠通過這樣的設置獲得通知:

var configurationOptions = ConfigurationOptions.Parse(<connection_string>);
_connectionMultiplexer = ConnectionMultiplexer.Connect(configurationOptions);
...
var subscriber = _connectionMultiplexer.GetSubscriber();

subscriber.Subscribe("__keyevent@0__:set", (_, key) =>
{
    _logger.LogWarning("Received '{CacheKey}'", key);            
});

運行上面的代碼,並在為 Redis 配置了用於通知的選項Eg$之后,每次將密鑰寫入緩存或從緩存中刪除時,我都會收到通知。

我只想收到某些鍵的通知。 例如,我希望只能接收以字符“my.key”開頭的鍵的通知。

初始方法

天真的方法是這樣的。

subscriber.Subscribe("__keyevent@0__:set", (_, key) =>
{
   if(!key.StartsWith("my.key"))
     return;
   _logger.LogWarning("Received '{CacheKey}'", key);            
});

它可以工作,但它給客戶端帶來了進行過濾的負擔,這可能不是最佳的,特別是考慮到(相當昂貴的)Redis 實例在多個服務之間共享,這導致我的服務收到不感興趣的通知。

我嘗試了類似以下的方法,但它似乎不起作用:

"__keyevent@0__:set my.key*"

有沒有辦法指定一個過濾器來從 Redis 獲取某些通知?

允許我進行過濾的正確命令是keyspace

通過配置 AKE 和以下代碼,我可以僅針對我的服務感興趣的鍵獲取通知:

subscriber.Subscribe("__keyspace@0__:my.key*", (_, key) =>
{
   _logger.LogWarning("Received '{CacheKey}'", key);            
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM