0

键空间通知对于我最近开发的一个 web api 来说是必不可少的。

我们在 azure 中设置了 redis。该 api 主要工作,我们使用通知来确定内存缓存上的数据是否需要更新。

现在,如果 redis 数据库被刷新,我们要处理通知刷新事件以清除本地内存缓存。但是我们无法通过 Keyspace 通知获取 flushdb 事件。 并且键空间事件启用为“AKE”。“AKE”字符串表示所有事件。

PS:我们可以通过 '__keyevent@2__:set' 之类的 'set' 事件获得通知

订阅代码如下所示。

 subscriber.Subscribe(
            "*",
            (channel, value) =>
            {
                // Some codes here
            });
4

3 回答 3

3

正如提到的其他答案一样,没有这样的通知。

毕竟,Keyspace Notification是针对单个 key上的事件的通知。每个通知都与一个键相关联。对于keyspace事件,键名称是通道名称的一部分。对于keyevent事件,键名是消息。

PUBLISH __keyspace@0__:key_name comamnd
PUBLISH __keyevent@0__:command key_name

每个发送通知的命令都必须有一个键作为参数。例如del keyset key val。但是,该flushdb命令没有键作为参数。该命令不会影响单个键。相反,它会删除数据库中的所有键。所以没有这样的通知。否则,您对频道有何期望?所有已删除的密钥?这不是一个好主意。

但是,您可以模拟一个事件flushdb

  1. 设置一个特殊的键,例如flushdb-eventset flushdb-event 0
  2. 订阅相应频道:subscribe __keyspace@0__:flushdb-event
  3. 在调用之前设置特殊键flushdbset flushdb-event 1

通过这种方式,您可以获得模拟flushdb通知。

于 2016-10-27T16:08:52.343 回答
0

根据Redis Documentation,Flushdb 没有通知。

于 2016-10-27T09:04:44.437 回答
0

我认为你有几个选择。

  1. 您可以定期调用INFO 命令并检查flushdbflushall调用次数的变化。这是我所指的INFO的输出...

    命令统计

    cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00 cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00

  2. 您可以运行MONITOR 命令并解析输出。请注意,这并不是一个真正的好选择 - 它对服务器端的性能影响很大,并且需要在客户端进行大量处理。

于 2016-10-27T16:19:34.957 回答