摘要: Redis Stream Redis最新的大版本5.0已经RC1了,其中最重要的Feature莫过于Redis Stream了,关于Redis Stream的基本使用介绍和设计理念可以看我之前的一篇文章(Redis Stream简介)。
Redis Stream
Redis最新的大版本5.0已经RC1了,其中最重要的Feature莫过于Redis Stream
了,关于Redis Stream的基本使用介绍和设计理念可以看我之前的一篇文章(Redis Stream简介)。Redis Stream
本质上是在Redis内核上(非Redis Module)实现的一个消息发布订阅功能组件。相比于现有的PUB/SUB
、BLOCKED LIST
,其虽然也可以在简单的场景下作为消息队列来使用,但是Redis Stream
无疑要完善很多。Redis Stream
提供了消息的持久化和主备复制功能、新的RadixTree数据结构来支持更高效的内存使用和消息读取、甚至是类似于Kafka
的Consumer Group
功能。今天我们重点关注怎么在实际业务场景下去使用Redis Stream
。
Redis Stream实战——IRC系统
相信大家对IRC都比较了解了(还记得被和谐掉的xx聊天室吗:-)),很多知名的开源项目(包括Redis)都有自己的IRC频道,方便开发者和使用者实时的进行思想火花的碰撞,我们今天介绍的主角——Redis Stream,本身就是起源于IRC中一个用户的idea。IRC的模型如下,
在某个IRC频道中的用户,既可以向所有的其他用户自由的发送消息,也可以接收其他所有用户发送的消息。如果要基于Redis来构建一个IRC系统,那我们不由自主的会想到使用Redis的PUB/SUB
功能,
可以看到,基于PUB/SUB
,只需要所有的用户(client)都订阅(subscribe
)同一个IRC频道(channel1),就可以接收所有用户发出的消息了。发出消息时,只需使用发布命令(publish
)命令即可。整个业务逻辑非常的清晰简单,这也是Redis强大和流行的重要原因——提供的功能和数据结构能尽可能提升开发者的开发效率。
但是基于PUB/SUB
构建的IRC,有一个问题是PUB/SUB
的消息模型是Fire and Forgot
。也就是说Redis本身并不保存任何历史消息,如果IRC中某个用户的网络连接出现异常,重新加入IRC后,他是看不到断链期间的聊天记录的,新加入的用户同样也看不到最近一段时间的历史记录,这个对用户迅速的理解当前讨论的问题非常不便。此外,如果Redis发生了重启,所有的用户也需要重新订阅频道。
那如果基于Redis Stream来构建IRC呢?
- 创建频道
- 发送消息
- 接收消息
- 获取历史消息
前面我们提到了,Redis Stream
和PUB/SUB
相比,一个重要的区别是,Redis Stream
可以获取历史发送的消息,所以当一个用户断开连接重新加入IRC时,可以通过如下方式获取历史消息:
Redis Stream实战——IoT数据采集
Redis除了强大而且丰富的数据结构支持,还有一个很重要的能力是跨平台,甚至是作为一个嵌入式的存储系统跑在基于ARM的平台上,比如作者之前就宣称,Redis成功的跑在了“树莓派”上。
试想一下,在IoT时代,会有无数随时随地可以接入互联网的智能设备,你家里的冰箱会实时的汇报,冰箱里面有哪些食物,数量多少,新鲜程度如何,空调会汇报现在温度多少,空气质量如何,你的车会不断的汇报发动机的各项数据,变速箱的各项数据,车内空气的各项数据。这么多的IoT设备会形成巨大的数据洪流,采集完成后在云端进行分析,产生巨大的用户价值。
这些数据虽然内容各个不同,但是都有一个共同的特点,都是一种时序数据。看到这里,你可能会突然发现,Redis Stream从设计初就是为了支持时间序列数据而生(见第一部分Redis Stream介绍),Redis又成功的跑在了ARM平台,而未来物联网会有万亿级的设备基于ARM平台。所以,我们不由自主的可以猜想,除了现在在各种互联网服务中作为Cache和KV存储广泛应用,Redis下一个大放异彩的领域也许就在物联网。
上面这个图,就是一个典型的物联网设备信息采集,分析,展示的架构。Redis作为一个嵌入式的存储系统跑在各个IoT设备上,各个设备使用Redis Stream
暂存产生的时序数据,然后再异步的推送到云端。云上部署的各个业务程序,会读取推送的原始数据,基于一定的规则进行分析,然后将结果写入可靠的数据存储系统。用户读取结果,在APP或者web页面上进行展示,从而整个系统形成一个闭环。
作者简介
夏德军,花名夏周,阿里云Redis技术专家,负责阿里云Redis内核开发和维护。活跃于开源社区,Redis Contributor,设计并实现了阿里云Redis开源项目ApsaraCache的部分核心feature,如时间点恢复,binlog同步等。
相关推荐
在“测试使用redis”文件中,可能包含了一些更复杂的应用场景,比如使用Redis的列表、集合、哈希表、有序集合等功能,或者涉及发布/订阅模式的实现。Redis的列表可以用来实现消息队列,集合可以存储不重复的元素,...
Redis是一款开源、高性能的键值对存储系统,广泛应用于缓存、数据库和消息中间件等场景。本资源为Redis 6.0的Windows版本,针对Windows操作系统进行了编译,旨在解决用户在CSDN上寻找Redis Windows版本时需消耗积分...
此外,Redis Stream是 Redis 5.0 引入的新特性,用于构建复杂的消息处理系统。 在黑马程序员课程源代码.zip中,可能包含了实际编程示例,帮助读者理解如何在实际项目中应用Redis。而PPT-PDF文件则可能包含理论讲解...
9. **命令和模块支持**:3.0.1 版本可能添加或增强了某些 Redis 命令,如 GEO 模块用于地理位置操作,或者 Stream 数据类型,为实时数据流处理提供了支持。 10. **安全性**:Redis 3.0.1 可能包含了安全性的增强,...
1. 安装多个Redis实例,每个实例运行在不同的端口上。 2. 使用`redis-trib.rb`工具配置集群,指定每个节点的角色和连接信息。 3. 启动集群,监控节点状态,确保所有节点都能正常通信。 4. 配置客户端连接集群,使用`...
作为一款开源的、支持网络的、内存中的数据结构存储系统,Redis可以处理大量的读写操作,是现代Web应用和分布式系统中的重要组件。在“Redis数据库 v6.2.14.zip”这个压缩包中,包含的是Redis 6.2.14版本的源码和...
1. **流(Streams)**:Redis 5.0引入了新的数据结构——Stream,它是一个有序的、可持久化的日志结构,支持多消费者模型,为实时数据处理提供了强大的工具。 2. **模块系统(Module System)**:Redis 5.0允许开发人员...
在本案例中,我们讨论的是Redis的3.2.10版本,这个版本是Redis发展历史上的一个重要里程碑,引入了许多改进和新特性。 1. Redis简介: Redis作为一个开源、免费的键值存储系统,由意大利开发者Antonio Bertolli...
在 Windows 上,可以使用 `redis-cli.exe` 连接到本地或远程 Redis 实例。 10. **配置与优化**:Redis 可以通过配置文件 `redis.conf` 进行设置,包括内存限制、日志级别、持久化策略等。根据实际需求进行适当调整...
4. **Stream数据类型**:虽然Stream数据类型是在后续版本Redis 5.0中引入的,但在Redis 3.2中已经可以预览,它为Redis带来了类似日志流的处理能力,适用于消息队列和时间序列数据存储。 5. **Redis Sentinel**:...
Windows版的Redis是Redis在Windows操作系统上的实现,为开发者在Windows环境下开发和测试应用提供了便利。 标题"Redis Windows版64位 绿色免安装版"指的是Redis在Windows 64位操作系统上的一个特别版本,这个版本...
Laravel流光Streamer是... 确保您已运行Redis 5.0实例并且Laravel配置为使用它确保已安装。用法此程序包用法有两个主要目的-发出新事件和侦听事件。 发射需要更多的工作才能使用,例如创建自己的Event类,然后可以通过a
Redis是世界上最受欢迎的开源内存数据结构存储系统,它作为一个高性能的键值数据库广泛应用于缓存、消息中间件、数据持久化等多个场景。本资源“redis3.0-window免安装”是专门为Windows操作系统设计的Redis 3.0版本...
- **Stream 数据结构**: 尽管在 Redis 3.2 中 Stream 数据结构尚未完全实现,但这个版本为后续版本引入 Stream 做了基础准备。 3. **管理工具** - **Redis Desktop Manager**: 包含的 `redis-desktop-manager-0.9...
- **图形界面工具**:如`Redis Desktop Manager`,提供跨平台的图形界面,方便可视化管理Redis实例。 3. **Java连接Redis**: - **Jedis**:Java社区广泛使用的Redis客户端,支持各种Redis命令,适合简单的键值...
Redis 3.0 集群与应用是关于如何配置、管理和使用Redis分布式数据库系统的一个教程,旨在提供简单明了的指导。Redis是一款高性能的键值存储服务,常用于数据库缓存、消息队列等场景。在3.0版本中,引入了集群功能,...
6. **Stream数据结构**:自Redis 5.0开始,新增了Stream数据类型,它是日志和消息传递的核心,支持时间戳和多字段的数据结构,可以用于构建复杂的消息队列和事件驱动的应用。 7. **模块系统**:Redis 5.0.4引入了...
在本文中,我们将深入探讨Redis数据库服务及其3.2.1版本的特点,同时也会介绍如何使用可视化管理工具来操作Redis实例。 首先,Redis 3.2.1是一个稳定版本,它在性能、稳定性和新特性方面都有显著提升。这个版本引入...
- Stream:学习Redis 5.0引入的Stream数据类型,用于构建复杂的数据流处理和日志聚合。 5. 性能优化与最佳实践: - 应用配置:了解如何根据实际需求调整Redis配置,如内存管理、网络优化等。 - 安全性:学习如何...
然而,对于大型高并发系统,可能需要考虑使用Redis的Stream或更专业的消息队列系统如RabbitMQ、Kafka等。 总之,Java和Redis的结合为开发者提供了强大的工具来构建高效、可扩展的分布式系统。通过熟练掌握Redis的...