[英]How to filter Redis Keyspace notifications
我想弄清楚如何正確使用 Redis 中的鍵事件通知系統,使用Azure Cache for Redis
和StackExchange.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.