- 浏览: 141722 次
文章分类
最新评论
Reids 数据库通知功能可以让客户端通过订阅给定的频道或者模式,来获知数据库中键的变化,以及数据库中命令的执行情况。
比如,以下代码展示了客户端如何获取 0 号数据库中针对 message 键执行的所有命令。
根据发回的通知显示,可见先后共有 SET 和 EXPIRE 两个命令对键 message 进行了操作。
像这一类关注“某个键执行了什么命令”的通知称为键空间通知(key-space notification),此外,还有另一类称为键事件通知(key-event notification),它们关注的是“某个命令被什么键执行了”。以下代码就是客户端如何获取 0 号数据库中所有执行了 DEL 命令的键的键事件通知的例子。
服务器的 notify-keyspace-events 配置选项值决定了服务器所发送通知的类型,如(更多设置可参考 Redis 的官方文档说明):
(1)值 AKE 表示想让服务器发送所有类型的键空间通知和键事件通知。
(2)值 AK 表示想让服务器发送所有类型的键空间通知。
(3)值 AE 表示想让服务器发送所有类型的键事件通知。
(4)值 KS 表示想让服务器只发送和字符串键有关的键空间通知。
(5)值 EL 表示想让服务器只发送和列表键有关的键事件通知。
发送数据库通知的功能是由 notifyKeyspaceEvent 函数实现的,其伪代码实现如下。
其中的 pubsubPublishMessage 函数就是 PUBLISH 命令的实现函数,订阅数据库通知的客户端收到的信息就是由这个函数发出的,其具体实现细节留待后面再进行介绍。
参考书籍:《Redis 设计与实现》第 9 章——数据库。
比如,以下代码展示了客户端如何获取 0 号数据库中针对 message 键执行的所有命令。
redis> SUBSCRIBE __keyspace@0__:message Reading messages... (press Ctrl-C to quit) 1) "subscribe" // 订阅信息 2) "__keyspace@0__:message" 3) (integer) 1 1) "message" // 执行 SET 命令 2) "__keyspace@0__:message" 3) "set" 1) "message" // 执行 EXPIRE 命令 2) "__keyspace@0__:message" 3) "expire"
根据发回的通知显示,可见先后共有 SET 和 EXPIRE 两个命令对键 message 进行了操作。
像这一类关注“某个键执行了什么命令”的通知称为键空间通知(key-space notification),此外,还有另一类称为键事件通知(key-event notification),它们关注的是“某个命令被什么键执行了”。以下代码就是客户端如何获取 0 号数据库中所有执行了 DEL 命令的键的键事件通知的例子。
redis> SUBSCRIBE __keyevent@0__:del Reading messages... (press Ctrl-C to quit) 1) "subscribe" // 订阅信息 2) "__keyevent@0__:del" 3) (integer) 1 1) "message" // 键 key 执行了 DEL 命令 2) "__keyevent@0__:del" 3) "key" 1) "message" // 键 number 执行了 DEL 命令 2) "__keyevent@0__:del" 3) "number"
服务器的 notify-keyspace-events 配置选项值决定了服务器所发送通知的类型,如(更多设置可参考 Redis 的官方文档说明):
(1)值 AKE 表示想让服务器发送所有类型的键空间通知和键事件通知。
(2)值 AK 表示想让服务器发送所有类型的键空间通知。
(3)值 AE 表示想让服务器发送所有类型的键事件通知。
(4)值 KS 表示想让服务器只发送和字符串键有关的键空间通知。
(5)值 EL 表示想让服务器只发送和列表键有关的键事件通知。
发送数据库通知的功能是由 notifyKeyspaceEvent 函数实现的,其伪代码实现如下。
def notifyKeyspaceEvent(type, event, key, dbid): # 如果给定的通知不是服务器配置允许发送的通知,则直接返回 if not (server.notify_keyspace_events & type): return # 发送键空间通知 if server.notify_keyspace_events & REDIS_NOTIFY_KEYSPACE: # 将通知发送给频道“__keyspace@<dbid>__:<key>” # 内容为键所发生的事件 <event> # 构建频道名字 chan = "__keyspace@{dbid}__:{key}".format(dbid=dbid, key=key) # 发送通知 pubsubPublishMessage(chan, event) # 发送键事件通知 if server.notify_keyspace_events & REDIS_NOTIFY_KEYEVENT: # 将通知发送给频道“__keyevent@<dbid>__:<event>” # 内容为发生事件的键 <key> # 构建频道名字 chan = "__keyevent@{dbid}__:{event}".format(dbid=dbid, event=event) # 发送通知 pubsubPublishMessage(chan, key)
其中的 pubsubPublishMessage 函数就是 PUBLISH 命令的实现函数,订阅数据库通知的客户端收到的信息就是由这个函数发出的,其具体实现细节留待后面再进行介绍。
参考书籍:《Redis 设计与实现》第 9 章——数据库。
发表评论
-
Lua 脚本
2019-10-07 19:49 673Redis 2.6 版本开始引入对 Lua 脚 ... -
Redis事务的实现
2019-09-22 18:56 467Redis 事务是 ... -
Redis集群之复制、故障转移及消息实现
2019-09-14 21:04 498在Redis集群 ... -
Redis集群实现原理
2019-09-14 12:19 668Redis 集群是 Redis 提供的分布式数 ... -
sentinel 系统介绍
2019-08-04 18:35 502Sentinel(哨兵)是 Redis 的高可 ... -
数据库复制
2019-07-13 22:02 365在连接到一 ... -
redis 客户端实现
2019-06-02 15:06 371Redis 服务器是典型的一对多服务器程序,通 ... -
AOF 持久化
2019-05-12 13:36 416除了前面提到的 RDB 持久化功能外,Redi ... -
RDB 文件结构
2019-04-27 12:10 576在RDB 持久化一节中,我们对 RDB 持久化 ... -
RDB 持久化
2019-04-14 17:20 419RDB 持久化功能可以将 Redis 在某个时 ... -
数据库实现
2019-03-24 13:58 439Redis 服务器将其所有的数据库都保存在 r ... -
Redis 五种对象
2019-01-20 11:13 363阅读本节前需要阅读 Redis 对象系统概览一 ... -
Redis 对象系统概览
2019-01-06 13:10 778前面介绍了 Redis 中用到的所有主要数据结 ... -
整数集合与压缩列表
2018-12-09 21:19 592在 Redis 中,当一 ... -
跳跃表在 Redis 中的应用
2018-08-23 16:30 2023前提申明,因篇幅 ... -
字典实现
2018-08-20 15:49 567字典在 Redis 中的应用相当广泛,如 Redis ... -
redis 字符串和列表实现
2018-08-08 16:41 748Redis 虽说由 C 语言 ...
相关推荐
Redis数据库是一种开源、高速、内存中的数据存储系统,它支持多种数据结构,如字符串、哈希、列表、集合和有序集合。Redis的全称是Remote Dictionary Server,它以键值对的形式存储数据,使得在处理高并发、低延迟...
接下来,我们将深入探讨Redis数据库的相关知识点。 一、Redis的数据类型 Redis提供了五种基本数据类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。每种类型都有其独特的用途: 1...
以下是对Redis数据库源码的一些核心知识点的详细说明: 1. 数据结构: Redis使用多种自定义的数据结构来存储和操作数据,如字符串(String)、哈希表(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)...
有序集合是 Redis 中的一种复杂的数据类型, 有序集合的值可以是多个字符串, 有序集合可以用来实现排名、分数等功能。 Redis 数据结构 – 哈希 哈希是 Redis 中的一种复杂的数据类型,哈希的值可以是多个键值对,...
根据提供的文件信息:“Redis数据库百度云02.txt”,我们似乎没有具体的文本内容来解析和生成相关的知识点。不过,可以从文件的标题、描述以及可能涉及的主题出发,为您详细地阐述关于Redis数据库的一些基础知识及其...
本文将深入探讨Redis数据库5.0.7版本的主要特性和功能。 首先,Redis 5.0.7是Redis的一个稳定版本,包含了自5.0.0以来的一系列改进和修复。这个版本的重点在于增强性能、提升稳定性,并引入了一些新的特性。 1. **...
Redis是一款高性能的键值对数据库,它...以上是关于“redis数据库设计”的主要知识点,涵盖了Redis的数据结构、持久化、复制、事务、脚本、发布订阅等核心特性。了解并掌握这些内容,对于使用和优化Redis系统至关重要。
Redis是一种高性能的键值数据库,广泛应用于缓存、消息队列等...总之,Redis的发布订阅机制和键过期通知功能在.NET环境下,通过StackExchange.Redis库可以轻松实现,为分布式系统提供了强大的实时通信和数据管理能力。
- Pub/Sub:发布/订阅功能允许客户端订阅感兴趣的频道,当有新消息发布到该频道时,所有订阅者都会收到通知。 - 主从复制:通过复制,可以创建多个Redis实例作为主服务器的副本,提高读取性能和容灾能力。 Redis-x...
Go-Redigo是针对Redis数据库的一个高效且功能丰富的Go语言客户端库,专为Go开发者设计,提供简单易用且性能优异的接口来与Redis进行交互。这个库的强大之处在于它全面支持Redis的所有命令,允许开发者执行各种数据...
这样,就可以实现实时的多对多通信场景,例如聊天室或通知系统。 在实际应用中,为了保证连接的稳定性和数据的完整性,`QRedis`类可能还会包含重试机制、超时控制以及异常处理等策略。同时,考虑到Qt的异步特性,...
此外,Redis的发布/订阅功能也可能用于实现消息通知,如新文章发布时通知订阅者。 **项目结构** 从"Blog-master"这个文件名来看,项目的根目录可能是这个名称,这符合Django项目的常规命名习惯。在该目录下,通常会...
【Redis数据库1】详解 Redis 是一款开源、免费且遵循 BSD 协议的高性能键值存储系统。作为一款内存数据库,Redis 具备快速读写能力,读取速度可达110000次/s,写入速度达81000次/s。其主要特点包括: 1. **持久化*...
【Redis数据库键值设计】 Redis作为一个高性能的键值存储系统,其丰富的数据结构(如字符串、哈希、列表、集合、有序集合等)为开发者提供了极大的灵活性。与关系型数据库不同,Redis允许开发者直接操作数据结构,...
此外,Redis 2.4.1版本还提供了发布/订阅(Publish/Subscribe)功能,这是一个简单的消息传递模型,允许客户端订阅特定主题,当有其他客户端向该主题发布消息时,订阅者会收到通知。这一特性常用于构建实时通信系统...
Redis的pub/sub功能提供轻量级的消息传递,适用于实时消息通知。 8. **HyperLogLog** 用于估算集合中不同元素的数量,空间效率高,适用于大数据量场景。 9. **地理空间索引** 提供GEO命令,支持地理位置信息的...
Redis是一种高性能的键值对数据存储系统,常用于缓存、消息队列和数据库功能。在C#中,我们可以利用StackExchange.Redis库来与Redis进行交互。本项目提供了一个基于C#的Redis发布与订阅(Publish/Subscribe)系统的...
另一端的用户订阅该队列,一旦有新消息,Redis会立即通知订阅者,从而实现实时同步。 4. **私聊与群聊**: 私聊是指用户之间的一对一通信,群聊则是多用户之间的消息共享。在实现过程中,需要设计合理的数据结构来...
4. **发布/订阅模式**:Redis提供了发布订阅功能,允许客户端订阅特定频道,当有新消息发布到这些频道时,订阅者会收到通知,常用于实现消息队列。 5. **主从复制**:通过主从复制,可以创建多个副本,用于读取负载...
例如,在实时计数、聊天室、通知系统等场景中,这一功能发挥了关键作用。 在实际使用中,为了优化性能,开发者需要注意一些最佳实践,如合理设置缓存过期策略、避免大Key、控制客户端连接数等。此外,Redis社区提供...