首先,检查Redis keyspace事件是否被启用是很重要的。例如,事件应该在类型为 Set 的键上启用。这可以通过CONFIG SET命令来完成:
CONFIG SET notify-keyspace-events KEs
一旦启用了keyspace事件,就只需要订阅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-eventsKEx)来获取基于通道的过期通知更新。
2条答案
按热度按时间dwthyt8l1#
常规订阅者API应该工作正常--没有对用例的假设,这应该工作正常。
然而,我同意这是一个内置的功能,它可能会受益于API上的helper方法,并且可能会受益于一个不同的委托签名-封装keyapace通知的语法,这样人们就不需要复制它。我建议你记录一个问题,这样它就不会被遗忘。
如何订阅密钥空间事件的简单示例
首先,检查Redis keyspace事件是否被启用是很重要的。例如,事件应该在类型为 Set 的键上启用。这可以通过
CONFIG SET
命令来完成:一旦启用了keyspace事件,就只需要订阅pub-sub通道:
了解有关键空间事件here的更多信息。
w7t8yxp52#
为了扩展所选答案已经描述的内容:
另一件重要的事情是,我必须订阅KEx(CONFIG SET notify-keyspace-eventsKEx)来获取基于通道的过期通知更新。