使用 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 key
、set key val
。但是,flushdb
命令没有键作为参数。该命令不会影响单个键。相反,它会删除数据库中的所有键。所以没有这样的通知。否则,您对频道有何期望?所有已删除的密钥?这不是个好主意。
但是,您可以为 flushdb
模拟一个事件
- 设置一个特殊键,例如
flushdb-event
: set flushdb-event 0
- 订阅相应频道:
subscribe __keyspace@0__:flushdb-event
- 调用前设置特殊键
flushdb
: set flushdb-event 1
这样就可以得到模拟的flushdb
通知
我想你有几个选择。
您可以定期调用 INFO command 并检查 flushdb 或 flushall[=28] 数量的变化=] 电话。这是我指的 INFO 的输出...
命令统计
cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00
cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00
您可以 运行 MONITOR command 并解析输出。请注意,这并不是一个好的选择 - 它对服务器端的性能影响很大,并且需要在客户端进行大量处理。
键空间通知对于最近的网络至关重要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 key
、set key val
。但是,flushdb
命令没有键作为参数。该命令不会影响单个键。相反,它会删除数据库中的所有键。所以没有这样的通知。否则,您对频道有何期望?所有已删除的密钥?这不是个好主意。
但是,您可以为 flushdb
- 设置一个特殊键,例如
flushdb-event
:set flushdb-event 0
- 订阅相应频道:
subscribe __keyspace@0__:flushdb-event
- 调用前设置特殊键
flushdb
:set flushdb-event 1
这样就可以得到模拟的flushdb
通知
我想你有几个选择。
您可以定期调用 INFO command 并检查 flushdb 或 flushall[=28] 数量的变化=] 电话。这是我指的 INFO 的输出...
命令统计
cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00 cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00
您可以 运行 MONITOR command 并解析输出。请注意,这并不是一个好的选择 - 它对服务器端的性能影响很大,并且需要在客户端进行大量处理。