使用 flushdb 的 Redis 键空间通知

Redis Keyspace Notifications with flushdb

键空间通知对于最近的网络至关重要api我一直在 发展中。

我们在 Azure 中设置了 Redis。 api 大部分都有效,我们使用通知来确定内存缓存中的数据是否需要更新。

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

PS:我们可以通过 'set' 事件获得通知,例如 '__keyevent@2__:set'

订阅码如下

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

根据Redis Documentation,Flushdb 没有通知。

正如另一个答案提到的那样,没有这样的通知。

毕竟,键空间通知是针对单键事件的通知。每个通知都与一个键相关联。对于 keyspace 事件,键名是频道名的一部分。对于 keyevent 事件,键名是消息。

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

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

但是,您可以为 flushdb

模拟一个事件
  1. 设置一个特殊键,例如flushdb-event: set flushdb-event 0
  2. 订阅相应频道:subscribe __keyspace@0__:flushdb-event
  3. 调用前设置特殊键 flushdb: set flushdb-event 1

这样就可以得到模拟的flushdb通知

我想你有几个选择。

  1. 您可以定期调用 INFO command 并检查 flushdbflushall[=28] 数量的变化=] 电话。这是我指的 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 command 并解析输出。请注意,这并不是一个好的选择 - 它对服务器端的性能影响很大,并且需要在客户端进行大量处理。