数据库
首页 > 数据库> > Redis键空间通知(Keyspace Notification)

Redis键空间通知(Keyspace Notification)

作者:互联网

从Redis 2.8.0开始,Redis加入了发布/订阅模式以及键空间消息提醒(keyspace notification)功能。键空间消息提醒提供了允许客户端通过订阅指定信道获取Redis数据变化的能力。

需要注意的是,键空间消息提醒并非可靠的,它不会对订阅端是否接收到消息进行确认。例如某个订阅的客户端暂时断开连接,在其直到恢复连接期间发生的事件将无法再次获得。

配置

在默认情况下,Redis并未开启键空间消息提醒功能。为了打开该功能,需要通过notify-keyspace-events配置进行设置,例如:

redis> CONFIG GET notify-keyspace-events
1) "notify-keyspace-events"
2) ""
redis> CONFIG SET notify-keyspace-events KEA
OK
redis> CONFIG GET notify-keyspace-events
1) "notify-keyspace-events"
2) "AKE"

在上述示例中将notify-keyspace-events配置为KEA,代表除未命中外的所有事件。其中,KE代表事件的两种类型——KeyspaceKeyeventKeyspace代表与事件名称相关的消息,例如订阅对指定键进行的操作事件;Keyevent代表与键名称相关的消息,例如订阅发生键过期事件的相关键名称。

关于更多的notify-keyspace-events配置,可参考下面的描述:

订阅指定事件

在完成配置后,可通过SUBSCRIBE命令订阅指定信道实现对一个或多个指定事件的订阅。例如通过订阅__keyevent@0__:expired实现订阅数据库0中的键过期事件例如示例1:订阅键过期事件

订阅的信道的格式为__<type>@<db>__:<event>,其包括了事件类型(keyspacekeyevent)、数据库(例如数据库0)以及事件(例如expired)三部分组成。对应事件的名称,可参考下文命令事件章节。

另外,也可以通过PSUBSCRIBE命令订阅一个或多个复合正则表达式匹配的信道。例如通过订阅__key*@*__:*订阅Redis中所有数据库中的所有事件。

命令事件

Redis为许多命令提供了不同的事件,在本文中将选择其中部分命令及其对应的事件进行介绍:

关于更多的命令相关事件,请参考keyspace notification相关文档

示例

订阅键过期事件

redis1> SUBSCRIBE __keyevent@0__:expired
1) "subscribe"
2) "__keyevent@0__:expired"
3) (integer) 1
# redis2> SETEX greeting 1 "hello world"
# 等待1秒后:
1) "message"
2) "__keyevent@0__:expired"
3) "greeting"

订阅所有事件

redis1> PSUBSCRIBE __key*@*__:*
1) "psubscribe"
2) "__key*@*__:*"
3) (integer) 1
# redis2> SET greeting "hello world"
1) "pmessage"
2) "__key*@*__:*"
3) "__keyspace@0__:greeting"
4) "set"
1) "pmessage"
2) "__key*@*__:*"
3) "__keyevent@0__:set"
4) "greeting"

参考资料

标签:__,订阅,Keyspace,产生,Notification,Redis,keyspace,事件,notify
来源: https://blog.csdn.net/ghosind/article/details/114242223