密钥空间通知对于我最近开发的Web API至关重要。
我们有天蓝色的Redis设置。该API大部分都可以使用,我们使用通知来确定是否需要更新内存缓存上的数据。
现在,我们要处理刷新事件,以便在刷新Redis数据库时清除本地内存缓存。 但是我们不能通过Keyspace通知获取flushdb事件。
并且键空间事件被启用为“ AKE”。“ AKE”字符串表示所有事件。
PS:我们可以通过“ set”事件(例如“ keyevent @ 2 :set”)获得通知
订阅代码如下。
subscriber.Subscribe(
"*",
(channel, value) =>
{
// Some codes here
});
正如提到的其他答案一样,没有这样的通知。
毕竟,“键空间 通知” 是有关 单个键
事件的通知。每个通知都与一个键关联。对于keyspace
事件,键名称是通道名称的一部分。对于keyevent
事件,键名称是消息。
PUBLISH __keyspace@0__:key_name comamnd
PUBLISH __keyevent@0__:command key_name
发送通知的每个命令必须有一个键作为参数。例如del key
,set key val
。但是,该flushdb
命令没有键作为参数。该命令不影响单个键。而是,它删除数据库中的所有键。因此,没有此类通知。否则,您对频道有什么期望?所有已删除的密钥?这不是一个好主意。
但是,您可以模拟一个事件flushdb
flushdb-event
:set flushdb-event 0
subscribe __keyspace@0__:flushdb-event
flushdb
:set flushdb-event 1
这样,您可以获得模拟flushdb
通知。
问题内容: 我环顾四周,无法找到如何使用StackExchange.Redis库在Redis上执行对键空间通知的订阅。 检查可用的测试,我发现使用通道是pubsub,但这更像是服务总线/队列,而不是订阅特定的Redis键事件。 是否可以使用StackExchange.Redis来利用此Redis功能? 问题答案: 常规订户API应该可以正常工作-在用例上没有任何假设,并且应该可以正常工作。 但是,
问题内容: 我有两个Redis客户端,在一个文件中,我有一个简单的脚本设置并删除了Redis密钥: 在第二个文件中,我有一个Redis客户端充当订户: 关键的“占位符”已设置,那么是否有充分的理由使我在“消息”处理程序中未获得任何输出? 问题答案: 您忘记了订阅用户客户端订阅特定的频道。此外,如果要监视所有事件,则需要使用基于模式的订阅。 您可能想要执行以下操作(未测试): 请参阅Redis文档和
Note 本文档翻译自: http://redis.io/topics/notifications 。 Warning 键空间通知功能目前仍在开发中,这个文档所描述的内容,以及功能的具体实现,可能会在未来数周内改变,敬请知悉。 功能概览 键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件。 以下是一些键空间通知发送的事件的例子: 所有修改键的命令。
FLUSHDB 清空当前数据库中的所有 key。 此命令从不失败。 可用版本: >= 1.0.0 时间复杂度: O(1) 返回值: 总是返回 OK 。 redis> DBSIZE # 清空前的 key 数量 (integer) 4 redis> FLUSHDB OK redis> DBSIZE # 清空后的 key 数量 (integer) 0
问题内容: 是否可以在Redis中创建名称空间? 从我发现的结果来看,所有全局命令(计数,全部删除)都适用于所有对象。有没有一种创建子空间的方法,以便这些命令在上下文中受到限制? 我不想为此设置不同的Redis服务器。 我认为答案是“否”,并且想知道为什么没有实现它,因为它似乎是一个有用的功能,而且没有太多开销。 问题答案: Redis服务器可以处理多个已编号的数据库。我认为默认情况下它提供了32
FLUSHDB 清空当前数据库中的所有 key。 此命令从不失败。 可用版本: >= 1.0.0 时间复杂度: O(1) 返回值: 总是返回 OK 。 redis> DBSIZE # 清空前的 key 数量 (integer) 4 redis> FLUSHDB OK redis> DBSIZE # 清空后的 key 数量 (integer) 0