使用flushdb的Redis Keyspace通知

时间:2016-10-27 07:41:54

标签: redis stackexchange.redis azure-redis-cache

密钥空间通知对于我最近的网络api来说至关重要 显影

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

现在,如果刷新redis数据库,我们希望处理通知flush事件以清除本地内存缓存。 但我们无法通过Keyspace通知获取flushdb事件。 密钥空间事件启用为" AKE"。 " AKE" string表示所有事件。

PS:我们可以通过'设置'事件如' __ keyevent @ 2 __:set'

订阅代码如下所示。

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

3 个答案:

答案 0 :(得分:1)

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

毕竟, Keyspace通知单一密钥上的事件通知。每个通知都与一个密钥相关联。对于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. 在致电flushdb之前设置特殊密钥:set flushdb-event 1
  4. 通过这种方式,您可以获得模拟的flushdb通知。

答案 1 :(得分:0)

根据Redis Documentation,没有关于Flushdb的通知。

答案 2 :(得分:0)

我认为你有几个选择。

  1. 您可以定期调用INFO command并检查 flushdb flushall 调用次数的变化。以下是 INFO 的输出,我指的是......

    Commandstats

    cmdstat_flushall:调用= 2,微秒= 112,usec_per_call = 56.00 cmdstat_flushdb:调用= 1,微秒= 110,usec_per_call = 52.00

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