Redis 自 3.0 以来经历了多次重大版本迭代,每个版本都引入了关键的新功能和特性,极大地提升了其性能、功能丰富度、安全性和适用场景。以下是 Redis 3.0 到 8.0 各主要版本的详细新功能和特性介绍:
Redis 3.0 (2015年发布)
核心里程碑:原生集群支持 (Redis Cluster)
- Redis Cluster (集群模式):这是 3.0 最重大的更新。它提供了原生的分布式解决方案,支持数据自动分片(Sharding)和高可用(High Availability)。
- 去中心化架构:集群中的每个节点都存储部分数据,并通过 Gossip 协议进行通信和元数据同步,无需中心代理节点。
- 数据分片:整个键空间被划分为 16384 个槽(Slots),每个主节点负责一部分槽。客户端可以根据键的哈希值直接定位到对应的节点。
- 高可用与故障转移:支持主从复制(Master-Slave Replication)。当主节点故障时,从节点可以自动选举提升为新的主节点,保证服务不中断。
- 在线扩容/缩容:支持在不中断服务的情况下,通过迁移槽(Slots Migration)来增加或减少节点。
- 只读从节点:从节点可以配置为提供只读服务,分担主节点的读取压力。
Redis 4.0 (2017年发布)
核心里程碑:模块化与非阻塞删除
- Redis Modules (模块系统):允许开发者使用 C 语言编写模块,动态加载到 Redis 服务器中,以扩展新的数据类型和命令。这极大地增强了 Redis 的可扩展性(例如后来的 RedisSearch, RedisJSON, RedisGraph 等模块)。
- Lazy Free / Async Delete (惰性删除/异步删除):
- 引入了
UNLINK 命令作为 DEL 的非阻塞替代方案。 - 对于大 Key(Big Key)的删除、过期清理或
FLUSHALL/FLUSHDB 操作,内存释放可以在后台线程中异步进行,避免了主线程因释放大量内存而阻塞,显著提高了服务的稳定性。 - 可通过配置项(如
lazyfree-lazy-eviction 等)控制不同场景下是否启用惰性删除。
- PSYNC2 (部分重同步改进):改进了主从复制的部分重同步机制。即使主从切换发生,新的主节点也能利用旧主节点的复制积压缓冲区(Replication Backlog)进行部分同步,减少了全量同步(Full Resynchronization)的发生概率,提高了复制效率。
- Memory Command (内存分析命令):新增了
MEMORY 命令系列(如 MEMORY USAGE, MEMORY DOCTOR, MEMORY STATS),帮助用户更精细地分析内存使用情况,定位内存消耗大的 Key 和碎片问题。 - LFU 淘汰算法:在原有的 LRU 等淘汰策略基础上,增加了 LFU (Least Frequently Used) 算法,可以根据键的使用频率进行淘汰,更适合缓存热点数据的场景。
- 混合持久化 (RDB+AOF):AOF 重写时,可以将当前内存数据以 RDB 格式写入 AOF 文件开头,后续增量命令继续以 AOF 格式追加。这大大加快了重启时的数据加载速度,同时保留了 AOF 的数据安全性。
- Active Defragmentation (主动内存碎片整理):可在运行时主动整理内存碎片,提高内存利用率(需编译时开启)。
Redis 5.0 (2018年发布)
核心里程碑:Stream 数据类型与集群管理内嵌
- Stream (流数据类型):引入了全新的数据结构 Stream,专为消息队列和事件流处理设计。
- 持久化消息队列:消息被持久化存储,支持多播(多个消费者组)。
- 消费者组 (Consumer Groups):支持类似 Kafka 的消费者组模式,允许多个消费者协同消费同一个流中的消息,并跟踪每个消费者的读取进度(Last Delivered ID)。
- 消息回溯:支持消费者重新读取历史消息。
- 底层结构:使用 Radix Tree (基数树) 和 Listpack (紧凑列表,替代 Ziplist) 实现,兼顾了高效查询和有序写入。
- Redis Cluster 管理工具内嵌:将原本基于 Ruby 的集群管理工具
redis-trib.rb 的功能用 C 语言重写并集成到 redis-cli 中。现在可以直接使用 redis-cli --cluster 命令来创建、管理、检查和修复集群,降低了部署和维护门槛。 - Ordered Set (ZSet) 增强:为有序集合添加了新的命令和功能,如
BZPOPMAX/BZPOPMIN(阻塞式弹出最大/最小元素)。 - 客户端连接限制:可以更精细地控制客户端连接行为。
Redis 6.0 (2020年发布)
核心里程碑:多线程 I/O 与 ACL 安全控制
- Multi-threaded I/O (多线程网络 I/O):
- 背景:Redis 的核心命令执行仍然是单线程的,但在高并发网络 I/O 场景下,网络读写成为了瓶颈。
- 实现:引入了多个 I/O 线程专门用于处理网络请求的读取(Read)和响应写入(Write),以及命令解析。主线程依然串行执行命令,保证了数据一致性和无需复杂锁机制的优势。
- 效果:在高并发场景下,吞吐量可提升近一倍(具体取决于硬件和负载)。
- ACL (Access Control List, 访问控制列表):
- 提供了细粒度的用户权限控制。可以为不同用户设置用户名和密码,并精确控制其可以执行的命令、可以访问的 Key 模式以及可以使用的 Pub/Sub 频道。
- 取代了之前仅靠密码和
rename-command 的粗糙安全机制,更适合多租户环境。
- RESP3 协议:引入了新的客户端通信协议 RESP3 (Redis Serialization Protocol version 3)。
- 支持更多数据类型(如 Map, Set, Double, Null 等)的原生表示。
- 支持推送(Push)消息,允许服务器主动向客户端发送信息(如订阅消息、ACL 警告等),而不仅仅是请求 - 响应模式。
- Client-side Caching (客户端缓存):配合 RESP3 协议,支持服务器通知客户端哪些 Key 已失效,使客户端能够维护本地缓存,减少对服务器的重复请求,进一步降低延迟。
Redis 7.0 (2022年发布)
核心里程碑:Redis Functions 与 Multi-Part AOF
- Redis Functions (Lua 脚本的继任者):
- 引入了新的可编程后端机制,用于替代部分 Lua 脚本场景。
- 函数库(Function Libraries)可以被显式加载、复制和持久化,解决了 Lua 脚本在复制和持久化方面的痛点。
- 支持更好的内存管理和错误处理。
- Multi-Part AOF (多部分 AOF):
- 解决了传统 AOF 重写期间需要缓冲大量增量数据的问题。
- 将 AOF 文件拆分为基础文件(Base,通常是 RDB 格式的全量数据)和多个增量文件(Incr,记录后续的写操作)。
- 重写时只需创建一个新的增量文件,无需等待旧的重写完成再截断,减少了内存占用和延迟,加快了恢复速度。
- Sharded Pub/Sub (分片发布/订阅):
- 在集群模式下,Pub/Sub 消息现在可以跟随 Key 的分片逻辑进行路由。这意味着发布和订阅可以在集群的任何节点上进行,消息会自动路由到负责该频道的分片,提高了集群环境下 Pub/Sub 的可扩展性。
- Client Eviction (客户端驱逐):当内存达到上限时,除了驱逐 Key,还可以选择断开空闲的客户端连接以释放内存。
- ACL v2:增强了 ACL 功能,支持更复杂的规则选择器(Selectors),可以对不同的命令模式应用不同的权限规则。
- 命令执行统计增强:提供了更详细的命令执行耗时直方图和子命令级别的性能统计信息。
- RDB 格式升级:引入了新的 RDB 文件格式(版本 10),优化了存储效率,并在加载旧格式时自动将 Ziplist 转换为 Listpack。
Redis 8.0 (2025年发布)
核心里程碑:AI 原生支持与性能飞跃,重归开源
- Vector Set (向量集合,Beta):
- 专为 AI 和机器学习场景设计的新数据结构。
- 支持存储高维向量嵌入(Embeddings),并提供高效的向量相似度搜索(Vector Similarity Search)能力。
- 支持混合查询(结合向量搜索和其他过滤条件),适用于语义搜索、推荐系统等 AI 应用。
- I/O 多线程架构升级:
- 对 Redis 6.0 引入的 I/O 多线程进行了深度优化和重构。
- 通过配置
io-threads 参数,可以更充分地利用多核 CPU。官方测试显示,在多核环境下,吞吐量最高可提升约 112%(即 2 倍以上)。
- 原生模块整合 (Redis Stack 功能内嵌):
- 将原本属于 Redis Stack 的多个模块功能(如 JSON, TimeSeries, Search, Graph, Bloom Filter, Cuckoo Filter, Count-Min Sketch, Top-K, t-digest 等概率数据结构)的核心功能直接整合到开源版 Redis 中,或者以更紧密的方式提供。这使得 Redis 开箱即用能力更强,不再严重依赖外部模块。
- 特别是新增了对 JSON 数据类型的原生支持(或深度集成),以及对多种概率数据结构的内置支持。
- 复制性能提升:引入了新的复制机制,支持并行传输全量数据和增量数据,使同步时间减少了约 18%。
- 许可证变更与重归开源:
- 在 Redis 7.4 曾短暂切换到非 OSI 批准的 SSPLv1/RSALv2 许可证引发社区争议后,Redis 8.0 宣布重新采用 AGPLv3 许可证(同时可能保留其他选项),重新拥抱开源社区,消除了开发者和云厂商的顾虑。
- 其他性能优化:包含了超过 30 项性能改进,涉及常用命令(如 GET, SET)的延迟降低(5.4%-87.4% 不等)。
总结:
- 3.0: 分布式基石 (Cluster)。
- 4.0: 扩展性与稳定性 (Modules, Lazy Free, Memory Tools)。
- 5.0: 消息队列 (Stream) 与易用性 (CLI Cluster)。
- 6.0: 高性能与安全 (Multi-thread I/O, ACL)。
- 7.0: 可编程性与持久化优化 (Functions, Multi-Part AOF, Sharded Pub/Sub)。
- 8.0: AI 时代与全面进化 (Vector Set, Enhanced Multi-thread, Integrated Modules, Return to Open Source)。
Redis 的发展轨迹清晰地展示了其从一个简单的键值缓存,逐步演进为一个支持复杂数据结构、高并发、高可用、强安全、可编程且面向 AI 时代的实时数据平台的过程。