Redis 键空间通知

  键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 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

最新文章

  1. Github pages + jekyll 博客快速搭建
  2. MVC简单实例
  3. 2014 Hangjs 见闻流水账第一天
  4. 2016 Al-Baath University Training Camp Contest-1 B
  5. 工程目录 Java/Web/Maven
  6. struts2标签获取parameter,request,session,application中的值
  7. Android内存管理之道
  8. curl 命令使用总结
  9. MSSQL查询数据分页
  10. mysql的账户管理
  11. 如何用elementui去实现图片上传和表单提交,用axios的post方法
  12. MySQL Err(1024):Lock wait timeout exceeded; try restarting transaction
  13. mysql主从复制配置问题
  14. 系统之锹sysdig:Linux服务器监控和排障利器
  15. [LeetCode] 804. Unique Morse Code Words_Easy tag: Hash Table
  16. codeforces 261B Maxim and Restaurant(概率DP)
  17. 初次学习Vue,输出Hello Vue!
  18. vSphere Client 连接ESXi 或者是vCenter 时虚拟机提示VMRC异常的解决办法
  19. 关于nodejs的几个干货(读中文文件编码问题/发送邮件/定时任务)
  20. requirements.txt

热门文章

  1. angular学习笔记系列一
  2. please complete all spokes before continuing 提示
  3. angularjs指令中的require赋值含义
  4. C# #if, #else和#endif预处理指令
  5. Kotlin Reference (九) Properties and Fields
  6. 汉诺塔(Hanoi)——小小算法
  7. Codeforces 165 E. Compatible Numbers【子集前缀和】
  8. rabbitmq学习(一):AMQP协议,AMQP与rabbitmq的关系
  9. CSS基础知识,学前准备
  10. Linux下编写动态链接库