Redis键空间通知(Keyspace Notifications)
Redis Keyspace Notifications
https://redis.io/topics/notifications
Redis 是一个键值对数据库服务器,服务器中每个数据库都由 redisDB 结构表示(默认16个库)。其中,redisDB 结构的 dict 字典保存了数据库中所有的键值对,这个字典被称为键空间(key space)。
而16个库,独立在各自的键空间(key space)中。
键空间(key space)操作
假设对0号库执行 set、get、del等命令,其实都是通过对键空间字典进行操作来实现的。
除此之外,还有:
清空整个数据库的 flushdb 命令;
随机返回数据库中某个键的 randomkey;
返回数据库键数量的 dbsize ;
还有 exists 、 rename 、 keys , 等等, 这些命令都是通过对键空间进行操作来实现的。
键空间通知(Keyspace Notifications)能做什么?
根据上面的描述,对Redis操作的命令,最后都是落在一个库中(0~15号库)执行;
比如:你在0号库执行的所有命令,都是在对应的键空间(key space)字典上发生数据变更
。
而数据变更
,发生在这个键空间(key space)时,Redis基于pub/sub发布订阅,能够对你感兴趣的事件
进行通知。
而可监听的感兴趣事件
,是什么呢?这个不着急,后面又详解,几乎所有Redis产生数据变更的命令,均可订阅。
Keyspace notifications 功能是Redis 2.8.0开始支持。
Keyspace notifications is a feature available since 2.8.0
以下内容翻译自 https://redis.io/topics/notifications
功能概览
键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件。
以下是一些键空间通知发送的事件的例子:
- 所有修改键的命令。
- 所有接收到 LPUSH key value [value …] 命令的键。
0
号数据库中所有已过期的键。
事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下, 直接使用键空间通知功能。
因为 Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略, 所以如果你的程序需要可靠事件通知(reliable notification of events), 那么目前的键空间通知可能并不适合你:当订阅事件的客户端断线时, 它会丢失所有在断线期间分发给它的事件。
事件的类型
对于每个修改数据库的操作,键空间通知都会发送两种不同类型的事件。
比如说,对 0
号数据库的键 mykey
执行 DEL key [key …] 命令时, 系统将分发两条消息, 相当于执行以下两个 PUBLISH channel messa