官方信息表
| 项目 | 说明 |
|---|---|
| 项目名称 | Redis |
| 一句话定位 | 内存数据结构服务器,广泛用作缓存、消息中间件、向量数据库与实时分析引擎 |
| 所属组织 | Redis Ltd.(作者 Salvatore Sanfilippo,antirez) |
| 代码仓库 | redis/redis |
| 当前版本 | 8.x(README 以 8.10+ 为例) |
| 实现语言 | C |
| 官方网站 | redis.io |
| 开源协议 | AGPLv3(Redis 8.0 起以 Redis Open Source 名义重新开源) |
| Star 数 | 77k+ |
| 默认端口 | 6379 |
官方配图

项目背景
Redis 是一款开源的内存数据结构服务器,由意大利开发者 Salvatore Sanfilippo(网名 antirez)在 2009 年发布。它最初只是 antirez 为了自己的实时统计项目而写的一个个人小工具,后来迅速在开发者社区走红,成为后端基础设施里最常见的组件之一。今天几乎所有互联网公司的架构图里都能看到 Redis 的身影——它被用作缓存、会话存储、消息队列、排行榜、限流计数器、分布式锁,甚至在大模型时代还被用来做向量数据库和 RAG 检索后端。
README 在开篇就把 Redis 的定位讲得很清楚:"For developers who are building real-time data-driven applications, Redis is the preferred, fastest, and most feature-rich cache, data structure server, and document and vector query engine." 也就是说,Redis 不只是一个简单的 Key-Value 缓存,它同时是数据结构服务器、文档数据库和向量查询引擎。
README 列出了 Redis 的核心使用场景:缓存、分布式会话存储、数据结构服务器、NoSQL 数据存储、搜索与查询引擎、事件存储与消息中间件、生成式 AI 向量存储、实时分析。这八个场景覆盖了从 Web 后端到大数据再到 AI 应用的完整链路,也是 Redis 这些年不断扩展能力边界的结果。
从性能上看,Redis 把数据全部放在内存里读写,配合高效的数据结构,单次读写延迟通常在亚毫秒级。README 在 Why choose Redis 一节专门强调了这一点:"Because Redis keeps data primarily in memory and uses efficient data structures, it achieves extremely low latency (often sub-millisecond) for both read and write operations." 这也是为什么高并发场景下 Redis 几乎是唯一选择——它能在单机每秒处理十几万次读写,把数据库从频繁的磁盘查询里解放出来。
2024 年 Redis 公司因为 License 调整引发过社区争议,2025 年发布的 Redis 8.0 正式以 "Redis Open Source" 的名义重新以 AGPLv3 协议开源,README 中也明确说明 "Redis Community Edition (Redis CE) was renamed Redis Open Source with the v8.0 release." 同时 Redis Ltd. 也提供商业版 Redis Software(自托管企业版)和 Redis Cloud(全托管云服务),面向有合规、高可用、弹性伸缩需求的企业客户。
antirez 在 2020 年从 Redis Ltd. 离职,但项目仍然由 Redis 公司和开源社区共同维护。README 在 Community 一节指向了官方社区资源,包括邮件列表、Discord、Stack Overflow 标签等渠道。任何人都可以通过 GitHub 提交 Issue 或 Pull Request 参与开发。
核心特性逐条翻译
README 列出了 Redis 支持的主要数据类型和能力,逐条翻译如下:
String(字符串)。 最基础的数据类型,可以存文本、序列化对象、二进制数组,用作缓存、计数器、位运算。
JSON。 从 Redis 7.0 开始原生支持 JSON 文档,可以用 JSONPath 表达式索引和查询,配合 Redis Search 做文档检索。
Hash(哈希)。 字段-值映射,适合存对象,比如用户信息。Hash 还支持字段级 TTL,可以让某个字段单独过期。
List(列表)。 双向链表,用作栈、队列、消息队列。
Set(集合)。 无序唯一字符串集合,适合做去重、关系判断、交并差运算。
Sorted Set(有序集合)。 带分数排序的唯一集合,常用于排行榜、限流计数器。
Vector Set(向量集合,beta)。 存向量嵌入,用于语义相似度搜索、语义缓存、RAG 检索。这是 Redis 对接大模型时代的核心能力。
Geospatial(地理空间索引)。 存经纬度,用于查找附近的点。
Bitmap / Bitfield。 位运算,用于用户签到、权限位、布隆式计数。
HyperLogLog。 概率数据结构,用于估算 UV、去重计数。
Bloom Filter / Cuckoo Filter。 概率过滤器,用于判断某值是否存在,常用于风控、去重。
t-digest / Top-k / Count-min sketch。 概率统计数据结构,用于分位数估算、热门排行、频次统计。
Time Series(时序)。 按时间索引的数据点,用于监控、传感器数据。
Pub/Sub(发布订阅)。 轻量消息广播,发布者往频道发消息,订阅者收消息。
Stream(流)。 追加日志,支持消费者组,用于事件溯源、消息队列。
Transaction(事务)。 一组命令原子执行,中间不会被其他客户端打断。
Programmability(可编程)。 服务端执行 Lua 脚本,复杂逻辑在服务端跑,减少网络往返。因为脚本在服务端执行,读写数据的效率非常高,适合做原子性的复杂业务逻辑。
模块扩展(Modules API)。 Redis 不局限于内置数据结构,官方提供了模块 API,第三方可以用 C/Rust 写新模块扩展 Redis 能力。JSON、时序、Bloom 过滤器、向量搜索等高级功能都是以模块形式提供的。
高可用与分布式。 Redis 原生支持主从复制、Sentinel 哨兵模式、Cluster 集群分片。生产环境一般用 Sentinel 做自动故障转移,或者用 Cluster 把数据分片到多个节点。
多租户与权限。 Redis 6.0 开始支持 ACL,可以给不同客户端分配不同的命令权限和 key 空间,适合多租户场景。
环境要求
Redis 对硬件要求极低:
- 操作系统:Linux、macOS、OpenBSD、NetBSD、FreeBSD 均可;
- 编译工具链:GCC 或 Clang;
- 如果需要编译全部模块(JSON、时序、Bloom 过滤器、查询引擎等),还需要 LLVM 21、CMake 3.25–3.31.6、Rust 1.94、OpenSSL、Python 3;
- 内存:最小配置 256MB 即可跑起来,生产环境根据数据量决定。
README 特别提醒,CMake 版本必须在 3.25 到 3.31.6 之间,CMake 4.x 不支持。如果你用的发行版默认带 CMake 4.x(比如 Ubuntu 26.04),需要手动降级到支持的版本。另外,make bootstrap 会自动安装系统依赖包,但可能覆盖你已有的编译器版本,建议在干净的容器里跑,或者先用 make bootstrap list 看看缺什么再手动装。
部署步骤
方式一:Docker 一键启动(最快体验)
README 在 Getting Started 一节给出了官方 Docker 镜像的启动命令:
docker run -d -p 6379:6379 redis:latest
这条命令会拉取官方 Alpine 版 Redis 镜像,后台运行并把容器的 6379 端口映射到本机。启动后用 redis-cli 就能连接测试。
方式二:使用官方二进制包
README 列出了多种预编译发行渠道:
macOS 用户直接 brew install redis;Debian/Ubuntu 用户可以用官方 APT 源;CentOS/RHEL 用户用官方 RPM 源。
方式三:从源码编译
README 在 Build Redis from Source 一节给出了完整的编译步骤,适用于 Redis 8.10 及以上版本。
先获取源码:
# 方式 A:下载 release tarball
wget https://github.com/redis/redis/releases/download/<version>/redis-full-<version>.tar.gz
tar xvf redis-full-<version>.tar.gz && cd redis-<version>
# 方式 B:从 git 克隆
git clone https://github.com/redis/redis.git && cd redis
make modules-update
然后安装依赖。README 推荐在干净环境里跑 make bootstrap,它会自动检测操作系统并安装所有模块所需依赖:
make bootstrap
如果你不想让 bootstrap 动宿主机,可以先 make bootstrap list 看缺什么包,或 make bootstrap dry-run 看它会执行什么命令,再手动安装。也可以直接用仓库自带的 Docker 构建环境:
docker build -f docker/Dockerfile.noble -t redis-build:noble .
docker run --rm -it -v "$PWD":/workspace -w /workspace redis-build:noble \
bash -lc 'make -j"$(nproc)" && make run'
依赖装完后开始编译:
export BUILD_TLS=yes # 可选:开启 TLS 支持
make -j "$(nproc)"
编译完成后启动:
# release tarball 方式
./src/redis-server redis.conf
# git clone 方式
./src/redis-server redis-full.conf
安装到系统路径:
make install PREFIX=/usr/local
sudo make install
install 命令会把 redis-server、redis-cli、redis-benchmark 等二进制文件拷到 $PREFIX/bin,把各模块的 .so 库拷到 $PREFIX/lib/redis/modules,并自动改写配置文件里的 loadmodule 路径。如果只想装核心二进制不编译模块,可以用 make build redis && make install。
生产环境配置建议
生产环境一般建议用 Docker 方式部署,因为官方镜像已经打包好所有模块,不需要自己处理编译依赖。如果是 Kubernetes 集群,可以用 Bitnami 的 Redis Helm Chart 一键部署,自动做主从复制和持久化卷。小规模团队用 Redis Cloud 全托管最省心,不用自己备份、监控、升级。
Redis 默认配置只适合开发测试,生产部署前需要在 redis.conf 里调整几个关键参数:设置 bind 监听内网地址、设置 requirepass 访问密码、开启 appendonly yes 做 AOF 持久化、配置 maxmemory 上限和淘汰策略。这些参数的详细说明在官方配置文档里有完整解释。
使用方法
启动 Redis 后,用 redis-cli 连接测试:
cd src
./redis-cli
进入交互界面后,README 给出了最小测试用例:
redis> ping
PONG
redis> set foo bar
OK
redis> get foo
"bar"
redis> incr mycounter
(integer) 1
redis> incr mycounter
(integer) 2
ping 返回 PONG 说明连接正常;set 写一个键值对;get 读出来;incr 做自增计数。这五条命令就是 Redis 最核心的操作范式。
实际项目中,你会用各语言的客户端库连接 Redis。README 列出了官方支持的客户端:
- Python:redis-py
- Java:Jedis、Lettuce
- Go:go-redis
- JavaScript:node-redis
- C#:StackExchange.Redis
- PHP:Predis
如果喜欢图形化界面,README 推荐使用 Redis Insight,它是官方提供的可视化管理工具,可以浏览数据、设计索引、调试命令,还集成了自然语言 AI 助手 Redis Copilot。Redis Insight 可以在 Windows、macOS、Linux 桌面运行,也可以用 Docker 部署成 Web 版。
实际生产中,最常见的用法是把 Redis 作为 Web 后端的缓存层。比如用户请求一个商品详情,先查 Redis 里有没有,有就直接返回;没有再查数据库,查完写回 Redis 并设置过期时间。这种 Cache-Aside 模式能把数据库读压力降一个数量级。另一个常见用法是分布式锁:用 SET key value NX PX 30000 命令加锁,超时自动释放,避免多实例同时操作同一资源。
在 AI 应用里,Redis 8.0 开始被用作向量数据库和 RAG 后端。你可以把文档嵌入向量存进 Vector Set,查询时把用户问题也转成向量,在 Redis 里做相似度搜索,取出最相关的几段上下文,再喂给大模型做生成。这种用法配合 Redis 原生的低延迟优势,能把 RAG 检索延迟压到几毫秒。README 也提到 Redis 已经和 LangGraph、mem0 等 AI 框架集成,用于短期记忆、长期记忆、LLM 响应缓存和 RAG。
另一个常见场景是限流。比如要限制某个接口每分钟最多调用 100 次,可以用 Sorted Set 记录每次调用的时间戳,用 ZREMRANGEBYSCORE 清理 60 秒之前的记录,再用 ZCARD 判断当前窗口内有多少次。这种滑动窗口限流在 Redis 里只需要几条命令,比在数据库里做快几个数量级。
常见问题(FAQ)
问:Redis 重启后数据会丢吗? 默认配置下 Redis 是纯内存数据库,重启数据就没了。生产环境需要开启 RDB 或 AOF 持久化,把数据定期落盘。
问:Redis 6379 端口被占用怎么办? 改配置文件里的 port 字段,或者启动时加 --port 参数。
问:为什么编译时报 CMake 版本不兼容? README 明确说明模块要求 CMake 3.25 到 3.31.6 之间,CMake 4.x 不支持。Ubuntu 26.04 等默认带 CMake 4.x 的发行版需要手动降级:pip3 install 'cmake==3.31.6'。
问:make 完成后启动报 "Error loading the extension" 怎么办? 说明某个模块没编译成功,但配置文件里还写着 loadmodule。要么把缺失模块编译出来,要么把配置里对应的 loadmodule 行和模块相关配置注释掉。
问:Redis 能当数据库用吗? Redis 定位是内存数据结构服务器,适合存热数据、缓存、会话、队列。如果要存海量冷数据,应该用 PostgreSQL、MySQL 这类持久化数据库,Redis 作为前端缓存配合使用。
问:Redis 官方云服务是什么? README 提到了 Redis Cloud,是 Redis Ltd. 官方提供的全托管 Redis 云服务,集成了 Google Cloud、Azure、AWS。不想自己运维的可以直接用云服务。
问:Redis 能撑多大并发? 单机 Redis 正常可以达到每秒 10 万次以上读写,具体取决于 value 大小和命令复杂度。如果需要更高吞吐,可以用 Redis Cluster 做分片,把数据分散到多个节点。
问:Redis 适合存什么数据? 适合存热数据:缓存、会话、计数器、排行榜、消息队列、分布式锁、向量索引。不适合存需要长期持久化的冷数据——Redis 是内存数据库,虽然有 RDB/AOF 持久化,但设计目标不是替代关系型数据库。
问:Redis 和 Memcached 有什么区别? Memcached 只支持简单字符串,且是多线程模型;Redis 支持丰富的数据结构(List、Set、Sorted Set、Hash、Stream 等),单线程模型但性能极高,还支持持久化、主从复制、集群。新项目基本都直接选 Redis。
问:Redis 内存占满了会怎样? 默认情况下会报错。生产环境应该配置 maxmemory 上限和 maxmemory-policy 淘汰策略,比如 allkeys-lru 表示内存满了自动淘汰最久未使用的 key。合理设置淘汰策略可以让 Redis 在内存有限的情况下继续提供服务。
问:Redis 怎么做主从复制? 在从节点配置里加 replicaof 主节点IP 6379,主节点会自动把数据同步给从节点。生产环境一般用 Sentinel 哨兵模式做自动故障转移,主节点挂了自动提升从节点为主节点。
跳转链接
- 官方代码仓库:redis/redis
- 官方网站:redis.io
- 官方文档:redis.io/docs
- 命令参考:redis.io/commands
- Docker 镜像:hub.docker.com/_/redis
- Redis Insight 可视化工具:RedisInsight GitHub
- 客户端库列表:redis.io/docs/develop/clients
- 快速入门:redis.io/docs/develop/get-started
- 模块开发文档:Modules API
- Redis Cloud:cloud.redis.io