使用flushdb的Redis键空间通知

使用flushdb的Redis键空间通知,redis,stackexchange.redis,azure-redis-cache,Redis,Stackexchange.redis,Azure Redis Cache,键空间通知对于我最近访问的一个web api来说是必不可少的 发展中 我们在azure中安装了redis。api主要工作,我们使用通知来确定内存缓存上的数据是否需要更新 现在,我们要处理在刷新redis数据库时通知刷新事件以清除本地内存缓存的问题但我们无法通过键空间通知获取flushdb事件。 键空间事件作为“AKE”启用。“AKE”字符串表示所有事件 PS:我们可以通过“设置”事件获得通知,如__keyevent@2__:设置' 订阅代码如下所示 subscriber.Subscribe(

键空间通知对于我最近访问的一个web api来说是必不可少的 发展中

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

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

PS:我们可以通过“设置”事件获得通知,如__keyevent@2__:设置'

订阅代码如下所示

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

根据,Flushdb没有通知。

正如另一个答案所提到的,没有此类通知

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

PUBLISH __keyspace@0__:key_name comamnd
PUBLISH __keyevent@0__:command key_name
发送通知的每个命令都必须有一个键作为参数。e、 g.
del key
设置key val
。但是,
flushdb
命令没有键作为参数。该命令不影响单个键。相反,它会删除数据库中的所有键。所以没有这样的通知。否则,您对该频道有何期待?所有已移除的密钥?这不是个好主意

但是,您可以为
flushdb

  • 设置特殊键,例如
    flushdb事件
    设置flushdb事件0
  • 在相应频道上订阅:
    subscribe__keyspace@0__:flushdb事件
  • 在调用
    flushdb
    之前设置特殊键:
    设置flushdb事件1

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

    我认为您有两种选择

  • 您可以定期调用,并检查flushdb或flushall调用数量的变化。这是我所指的信息的输出

    Commandstats cmdstat\u flushall:calls=2,usec=112,usec\u per\u call=56.00 cmdstat\u flushdb:calls=1,usec=110,usec\u per\u call=52.00

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