使用StackExchange.Redis的Redis键空间通知

我环顾四周,我无法找到如何使用StackExchange.Redis库在Redis上执行键空间通知订阅。

检查可用的测试我发现使用频道的pubsub,但这更像是服务总线/排队,而不是订阅特定的Redis键事件。

是否可以使用StackExchange.Redis利用此Redisfunction?

常规订阅者API应该可以正常工作 – 对用例没有假设,这应该可以正常工作。

但是,我有点同意这是内置的function,可能会受益于API上的辅助方法,也许还有一个不同的委托签名 – 封装了keyapace通知的语法,以便人们不需要复制它。 为此:我建议你记录一个问题,这样就不会忘记它。

有关如何订阅键空间事件的简单示例

首先,检查Redis键空间事件是否已启用非常重要。 例如,应在类型为Set的键上启用事件。 这可以使用CONFIG SET命令完成:

 CONFIG SET notify-keyspace-events KEs 

一旦启用了密钥空间事件,它就是订阅pub-sub频道:

 using (ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("localhost")) { IDatabase db = connection.GetDatabase(); ISubscriber subscriber = connection.GetSubscriber(); subscriber.Subscribe("__keyspace@0__:*", (channel, value) => { if ((string)channel == "__keyspace@0__:users" && (string)value == "sadd") { // Do stuff if some item is added to a hypothethical "users" set in Redis } } ); } 

在此处了解有关键空间事件的更多信

只是为了扩展所选答案已经描述的内容:

 using (ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("localhost")) { IDatabase db = connection.GetDatabase(); ISubscriber subscriber = connection.GetSubscriber(); subscriber.Subscribe($"__keyspace@0__:{channel}", (channel, value) => { // Do whatever channel specific handling you need to do here, in my case I used exact Key name that I wanted expiration event for. } ); } 

另一个重要的事情是,我不得不订阅KEx(CONFIG SET notify- keyspace -events KEx )来获取到期通知的基于频道的更新。