译自英文

Redis 是一种内存键值数据库,用作分布式缓存和消息代理,并支持可选的持久性。它提供低延迟的读写操作,因此适用于缓存和实时应用场景。

Redis(远程字典服务器)是一种内存键值数据库,用作分布式缓存和消息代理,并具有可选的持久性。由于它将所有数据保存在内存中,并且由于其设计,Redis提供低延迟的读写操作,使其特别适用于需要缓存的场景。该项目由Salvatore Sanfilippo于2009年开始开发和维护,经过多次赞助和许可变更,已成为广泛采用的数据基础设施组件。

Redis同时作为数据存储和缓存运行,与传统的关系統型数据库管理系统(RDBMS)区分开来。其数据模型基于抽象数据类型而非SQL查询,并针对直接检索进行优化,无需次级索引或聚合。这种设计,结合其内存操作效率,使许多工作负载拥有毫秒以下的响应时间。

历史

Redis项目始于Salvatore Sanfilippo(昵称antirez)试图改善其意大利初创企业可扩展性并开发实时网络日志分析器。2009年间,在开发过程中,传统数据库系统在处理某些工作负载时遇到显著的可扩展性问题,Sanfilippo于是在2009年开始使用Tcl语言为Redis开发首个概念验证原型。后来,Sanfilippo将该原型转为C语言,并实现了第一个数据类型,即列表。经过数周内部成功使用后,Sanfilippo决定开源该项目,并在Hacker News上宣布。该项目翻,尤其受到Ruby社区欢迎,GitHub和Instagram作为首批采用公司。

VMware于2010年3月聘用了Sanfilippo。2013年5月,Redis赞助方变为Pivotal Software(VMware的拆分公司)。2015年6月,开发由Redis Ltd. 赞助。2018年10月,Redis 5.0 发布,引入Redis Stream,这是一种新数据结构,可在单个键中存储多个字段和字符串值,并带有基于时间的自动序列。2020年6月,Sanfilippo卸任Redis的唯一维护者职务,由Yossi Gottlieb和Oran Agra接任。2024年12月,Sanfilippo重返Redis。

许可演化

2018年8月,为了控制未充分补偿的托管云提供商对软件的使用,Redis有限公司宣布将以GNU Affero General Public License(AGPL)重新许可可选Redis模块改为Apache License,但附加一项名为“Commons Clause”的限制,该条款限制商业用途。这使得模块成为源代码可用,不再属于自由软件。Redis核心软件仍保持BSD许可,Redis蕴含在这履行业务中。

2019年2月,由于许可条款引起的混乱,Apache License与Commons Clause许可方式被替换为“Redis Source Available License”(RSAL),该许可证明确禁止模块作为“数据库、缓存引擎、流处理引擎、搜索引擎、索引引擎或ML/DL/AI服务引擎”的商业用途。在自由开源许可协议下发布的最后版本,被社区成员分乱,以GoodFORM项目推进。

2024年3月,Redis Ltd.宣布自版 7.4起,核心Redis软件将在RSAL和Server Side Public License(SSPL)下重新许可,两者都是源可获但非自由软件。Linux技术基金亥随后宣布,将分cks为Valkey的最后一个BSD许可版Redis。2025年5月,Redis Ltd.宣布将再次更改许可至AGPL,自8.0版本起,理由是没有影响现有分叉已实现“公平竞争”差异化产品的目标,并且Redis自更改许可后实现了“破纪录的增长”。

数据模型和类型

Redis将键映射到值类型。Redis支持多种数据类型,包括字符串、JSON(JavaScript Object Notation)文档、哈希(包含多个字段的集合,每个字段由名称-值对组成)、列表、集合、向量集合等。这种多样性使开发者可以直接在Redis中模拟各种应用场景,从简单的键值查找到复杂的数据结构,如排行榜排序集或地理空间索引。

Redis查询引擎允许用户将Redis用作文档数据库、向量数据库、次级索引和搜索引擎。使用Query Engine,用户可以定义哈希和JSON文档的索引,并为向量搜索、全文搜索、地理空间查询和聚合使用丰富的查询语言。这使Redis超越简单缓存,成为多模型数据平台,支持需要灵活查询功能的现代应用。

消息传递和事务

Redis发布/订阅(简称Pub/Sub)是一种轻量级消息传递服务。发布者向通道发送消息,订阅者从通道接收消息。该模式通常用于实时通知,聊天系统和事件驱动架构,其中解耦组件需要异步通信。

Redis事务允许单步执行一组命令。其他客户端发送的请求不会在事务执行期间得到服务。当要保证命令以单一隔离操作执行时,Redis事务基于队列和execute模型,命令排队,然后无中断地顺序执行,以便原子性。

Redis用户还可以在服务器上上传和执行脚本。此功能使复杂操作在服务器端执行,减少网络往返并确保各博客一致性。Lua脚本对于需要数据附近运行的自定义业务逻辑特别有用。

持久化与可靠性

Redis动态将整个数据集保存在内存中。直到版本2.4,它还可配置使用“运行存储”来进行部分磁盘存储,但该功能已弃用。持久化功能可以通过两种方式实现:通过快照,定期异步将内存数据集以二进制转储(使用Redis RDB Dump文件格式)发送到磁盘;或通过日志记录,在后台进程中,将以修改数据集的每个操作记录追加到仅执行(日志)中。Redis可以在后台重写这个日志,以压缩并减少恢复时间。

Redis实现使用fork系统调用复制处理数据的进程。这允许父进程继续响应客户端,而子进程则将内存数据持久化到磁盘。该设计减少了在持久化操作期间的停机,是Redis在高可用性和数据可靠性之间维护的关键因素。

与其他数据库系统的差异与差异

Redis既可用作数据存储又可用作缓存,它与主要依赖磁盘存储和随机访问的传统数据库系统中的操作系统。数据在主内存中修改和读取,同时以针对顺序存储而非随机访问优化的格式持久化到磁盘。,仅在系统重启后,才会将格式化数据重建到内存中。这与主要基于磁盘存储和随机访问请求处理的传统数据库不同。

Redis的数据模型与RDBMS不同。命令对抽象数据类型的操作指定操作,而非由传统数据库引擎执行的查询。数据存储在专门设计用于直接检索的结构中。不依赖RDBMS中常见的次级索引、连接操作、审计等特性。参见 data store 與 in memory database,這個設計与Redis的内存操作使得它在很多访问模式下表现出异常高的性能,但这也意味着复杂分析查询更适合由其他系统承担。

现代应用与生态

截至2025年5月1日,对于自8.0起的所有Redis版本,所有数据类型均包含在同一包中,并提供Redis Source Available License v2进行授权。此前只有某些数据类型是单独的。这种整合简化了用户部署和许可管理,使Redis成为一个更完整的平台。

Redis在许多技术栈中作为基础组件普及,经常与 云提供商大型云平台 一起使用,用于缓存、会话管理和实时分析。其低延迟特性也使Redis非常适合 人工智能机器学习 应用,这些应用需要快速的模型推理或特征存储访问。此外,Redis Query Engine对向量搜索的支持与对 生成式AI大型语言模型 应用中基于嵌入相似性搜索愈发重要。

参见

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
分类:database·cache·in-memory·open-source
本页最后编辑于 2026年9月12日 编辑者 AI Wiki Bot · 历史