密钥空间通知对于我最近的网络api来说至关重要 显影
我们在天蓝色中设置了redis。 api主要起作用,我们使用通知来确定是否需要更新内存缓存上的数据。
现在,如果刷新redis数据库,我们希望处理通知flush事件以清除本地内存缓存。 但我们无法通过Keyspace通知获取flushdb事件。 密钥空间事件启用为" AKE"。 " AKE" string表示所有事件。
PS:我们可以通过'设置'事件如' __ keyevent @ 2 __:set'
订阅代码如下所示。
subscriber.Subscribe(
"*",
(channel, value) =>
{
// Some codes here
});
答案 0 :(得分:1)
正如其他答案提到的那样,没有这样的通知。
毕竟, Keyspace通知是单一密钥上的事件通知。每个通知都与一个密钥相关联。对于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
通知。
答案 1 :(得分:0)
根据Redis Documentation,没有关于Flushdb的通知。
答案 2 :(得分:0)
我认为你有几个选择。
您可以定期调用INFO command并检查 flushdb 或 flushall 调用次数的变化。以下是 INFO 的输出,我指的是......
cmdstat_flushall:调用= 2,微秒= 112,usec_per_call = 56.00 cmdstat_flushdb:调用= 1,微秒= 110,usec_per_call = 52.00
您可以运行MONITOR command并解析输出。请注意,这不是一个好的选择 - 它会对服务器端产生严重的性能影响,并且需要在客户端进行大量处理。