使用 StackExchange.Redis 的 Redis 键空间通知
Posted
技术标签:
【中文标题】使用 StackExchange.Redis 的 Redis 键空间通知【英文标题】:Redis keyspace notifications with StackExchange.Redis 【发布时间】:2014-06-04 12:51:49 【问题描述】:我环顾四周,找不到如何使用 StackExchange.Redis 库在 Redis 上执行键空间通知订阅。
检查可用测试我发现 pubsub 使用通道,但这更像是一个服务总线/队列,而不是订阅特定的 Redis 键事件。
是否可以使用 StackExchange.Redis 来利用此 Redis 功能?
【问题讨论】:
启动蝙蝠信号...我的意思是,Marc Gravell 信号(因此是“MGS”)。 @SimonWhitehead 哈哈哈哈哈哈 (伸手将MGS关闭) 【参考方案1】:只是为了扩展所选答案已经描述的内容:
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 ) 以获取基于频道的过期通知更新。
【讨论】:
【参考方案2】:常规订阅者 API 应该可以正常工作 - 没有对用例的假设,这应该可以正常工作。
但是,我确实同意这是一种内置功能,可能会受益于 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
);
详细了解键空间事件here。
【讨论】:
顺便说一句,为了使用订阅者 API 模拟键空间通知,解决方案是什么?每当我们对某些 Redis DB 进行一些更改时,是否Publish
/PublishAsync
?
@Matias 不,如果启用了键空间通知,服务器会这样做。您需要做的就是订阅。
啊啊啊啊我明白了。 Keyspace 通知只是一个通道。我错了吗?
好的,正如您所说,也许 StackExchange.Redis 可以实现帮助程序以避免不太优雅的键空间通道名称约定。类似Keyspace.Subscribe("users:messages:*", RedisKeyEvent.SAdd)
有没有办法使用 .net API 启用事件,或者我必须使用控制台 CONFIG SET notify-keyspace-events KEs 来启用事件?以上是关于使用 StackExchange.Redis 的 Redis 键空间通知的主要内容,如果未能解决你的问题,请参考以下文章