Redis 键空间通知
2015-10-21 11:10
429 查看
【Redis 键空间通知】
键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件。
以下是一些键空间通知发送的事件的例子:
所有修改键的命令。
所有接收到 LPUSH 命令的键。
事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下, 直接使用键空间通知功能。
因为 Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略, 所以如果你的程序需要可靠事件通知(reliable notification of events), 那么目前的键空间通知可能并不适合你: 当订阅事件的客户端断线时, 它会丢失所有在断线期间分发给它的事件。
比如说,对
订阅第一个频道
以
当
键空间频道的订阅者将接收到被执行的事件的名字,在这个例子中,就是
键事件频道的订阅者将接收到被执行事件的键的名字,在这个例子中,就是
可以通过修改
当
另一方面,当参数不是空字符串时,功能开启。
输入的参数中至少要有一个
举个例子, 如果只想订阅键空间中和列表相关的通知, 那么参数就应该设为
将参数设为字符串
参考:http://redisdoc.com/topic/notification.html
键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件。
以下是一些键空间通知发送的事件的例子:
所有修改键的命令。
所有接收到 LPUSH 命令的键。
0号数据库中所有已过期的键。
事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下, 直接使用键空间通知功能。
因为 Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略, 所以如果你的程序需要可靠事件通知(reliable notification of events), 那么目前的键空间通知可能并不适合你: 当订阅事件的客户端断线时, 它会丢失所有在断线期间分发给它的事件。
事件的类型
对于每个修改数据库的操作,键空间通知都会发送两种不同类型的事件。比如说,对
0号数据库的键
mykey执行 DEL 命令时, 系统将分发两条消息, 相当于执行以下两个 PUBLISH 命令:
PUBLISH __keyspace@0__:mykey del PUBLISH __keyevent@0__:del mykey
订阅第一个频道
__keyspace@0__:mykey可以接收
0号数据库中所有修改键
mykey的事件, 而订阅第二个频道
__keyevent@0__:del则可以接收
0号数据库中所有执行
del命令的键。
以
keyspace为前缀的频道被称为键空间通知(key-space notification), 而以
keyevent为前缀的频道则被称为键事件通知(key-event notification)。
当
del mykey命令执行时:
键空间频道的订阅者将接收到被执行的事件的名字,在这个例子中,就是
del。
键事件频道的订阅者将接收到被执行事件的键的名字,在这个例子中,就是
mykey。
配置
因为开启键空间通知功能需要消耗一些 CPU , 所以在默认配置下, 该功能处于关闭状态。可以通过修改
redis.conf文件, 或者直接使用
CONFIG SET命令来开启或关闭键空间通知功能:
当
notify-keyspace-events选项的参数为空字符串时,功能关闭。
另一方面,当参数不是空字符串时,功能开启。
notify-keyspace-events的参数可以是以下字符的任意组合, 它指定了服务器该发送哪些类型的通知:
字符 | 发送的通知 |
---|---|
K | 键空间通知,所有通知以 __keyspace@<db>__为前缀 |
E | 键事件通知,所有通知以 __keyevent@<db>__为前缀 |
g | DEL、 EXPIRE、 RENAME等类型无关的通用命令的通知 |
$ | 字符串命令的通知 |
l | 列表命令的通知 |
s | 集合命令的通知 |
h | 哈希命令的通知 |
z | 有序集合命令的通知 |
x | 过期事件:每当有过期键被删除时发送 |
e | 驱逐(evict)事件:每当有键因为 maxmemory政策而被删除时发送 |
A | 参数 g$lshzxe的别名 |
K或者
E, 否则的话, 不管其余的参数是什么, 都不会有任何通知被分发。
举个例子, 如果只想订阅键空间中和列表相关的通知, 那么参数就应该设为
Kl, 诸如此类。
将参数设为字符串
"AKE"表示发送所有类型的通知。
参考:http://redisdoc.com/topic/notification.html
相关文章推荐
- redis通用工具类
- redis&zookeeper集群
- Redis
- Redis PHP连接操作
- Redis在Windows下安装和PHP中使用
- Redis 集群二
- Redis 集群
- Redis介绍以及安装(Linux)
- Redis源码分析(三十六)--- Redis中的11大优秀设计
- redis安装及基础操作(1)
- Redis Replication
- Redis在VMWare配置注意事项
- Redis学习总结和相关资料
- Redis学习总结和相关资料
- Redis学习总结和相关资料
- Redis AOF文件
- Redis RDB文件
- redis sentinel 高可用集群
- linux下安装redis,php安装redis扩展
- redis渗透中的getshell问题总结