redis
内存数据结构服务器,支持20+种数据类型,以极致性能著称,广泛用于缓存、队列、实时分析和AI向量搜索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
内存数据结构服务器,支持20+种数据类型,以极致性能著称,广泛用于缓存、队列、实时分析和AI向量搜索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:Redis官方组织头像
凌晨两点,你正在维护一个日活 500 万的电商平台。用户在搜索栏输入关键词,系统需要在 0.5 秒内返回商品列表。数据库里躺着一亿条商品记录,用传统的 SQL 查询需要 800 毫秒——用户体验直线下降。
这时,Redis 登场了。它不是传统数据库的替代品,而是性能加速引擎——把你的热点数据从「从磁盘读取」变成「从内存读取」,响应时间从 800ms 压缩到 1ms。这就是为什么 Instagram、Twitter、Snapchat、TikTok 这些亿级应用都在用 Redis 做缓存层。
Redis 最初由意大利开发者 Salvatore Sanfilippo 于 2009 年创建,用于解决自己网站的实时分析问题。后来他将项目开源,迅速成为 GitHub 上最受欢迎的 C 语言开源项目之一,目前拥有超过 74,000 颗星。2021 年,Redis 将其开源协议从 BSD 切换到 RSALv2+SSPLv1,引发社区广泛讨论,但也确立了其可持续发展的商业模式。
很多人以为 Redis 只是「缓存」,这其实大大低估了它。Redis 的官方定位是内存数据结构服务器(In-Memory Data Structure Server),它的核心能力远不止简单的键值存储。
打个比方:如果传统数据库是一个固定格局的仓库(只能用固定格式存取),Redis 就是一个自带 20+ 种工具的多功能工具箱——同一把钥匙,能开锁、能剪线、能拧螺丝,而且每次操作都在内存里完成,速度极快。
Redis 支持的核心数据结构包括:
SET views 10086 然后 INCR views 就能原子性地完成计数。LPUSH/RPOP 就是经典的 FIFO 队列模式。SINTER 求交集能快速找出共同粉丝。GEORADIUS 找出半径 5 公里内的所有门店。进入 2020 年代,Redis 找到了新的增长曲线:作为向量数据库服务 AI 应用。
大语言模型需要「喂」给它的上下文信息,这就是 RAG(检索增强生成)架构的核心。当你在 Chatbot 里问「我上个月买了什么」,系统需要从海量历史记录中检索相关内容,然后注入给 LLM 生成答案。这个检索环节,Redis 的 Vector Search 扩展提供了毫秒级向量相似度搜索能力。
Redis 官方数据显示,Redis Search 模块支持:
这让 Redis 从「缓存中间件」进化为「AI数据基础设施」,直接对标 Pinecone、Weaviate 等专业向量数据库。
Redis 的部署非常简单。源码中没有内置 Dockerfile,但项目提供了完整的 systemd 服务脚本(utils/systemd-redis_server.service)和 SysVinit 初始化模板(utils/redis_init_script.tpl),Linux 用户可以一行命令完成安装和开机自启。
Ubuntu/Debian 环境从源码编译的步骤:
git clone https://github.com/redis/redis.git
cd redis
make -j$(nproc) # 多核并行编译
sudo make install
编译完成后,redis-server 即为数据库服务进程,redis-cli 是命令行客户端。配置文件 redis.conf 提供了超过 400 个配置项,从内存限制到持久化策略、从主从复制到集群模式,配置粒度非常细致。
Docker 方式(推荐生产环境): Redis 官方维护 Docker Hub 镜像,一条命令即可启动:
docker pull redis:latest
docker run -d --name redis -p 6379:6379 redis:latest
注意:Docker Hub 官方镜像是独立维护的(不在 GitHub 仓库中),由 Redis 公司官方发布,包含所有模块支持。
硬件需求:Redis 本身是纯 CPU 计算,不依赖 GPU。内存需求取决于数据集大小——作为内存数据库,所有数据必须能放入 RAM。生产环境建议至少 2GB 内存,磁盘主要用于 AOF/RDB 持久化文件(建议 SSD)。
Redis 的核心代码全部使用 C 语言编写(项目本身获得超过 74,000 颗星,是 GitHub 上最受关注的 C 语言项目)。代码库非常精炼,核心逻辑集中在 src/ 目录:
src/server.c:服务器主循环,处理所有客户端命令src/ae.c:事件驱动引擎,封装 epoll/kqueue/select 多路复用接口src/anet.c:网络层封装,处理 TCP 连接和协议解析src/redis-cli.c:官方命令行客户端Redis 采用单线程事件循环架构(一个主线程处理所有请求),通过 epoll/kqueue 实现高并发。这在 2009 年是极具洞察力的设计——避免了多线程锁竞争,保证每个命令的原子性,同时现代 CPU 单核性能足够支撑每秒 10 万+ QPS。
模块系统(Redis Modules API)允许用 C/Go/Rust 等语言编写扩展模块,赋予 Redis 新的数据结构和命令。RediSearch、RedisJSON、RedisGraph 等知名扩展都是基于这一机制。
测试方面,Redis 提供了完整的测试套件:runtest(标准测试)、runtest-cluster(集群测试)、runtest-sentinel(高可用测试),覆盖了持久化、复制、集群、模块等全场景。
Redis 并不是万能药,以下场景需要谨慎评估:
1. 内存成本:DRAM 价格是 SSD 的 10-20 倍,存储 TB 级冷数据成本极高。Redis Labs 推出的 Redis on Flash(DRAM + SSD 混合存储)尝试解决这个问题,但在开源版本中并不可用。
2. 持久化一致性:RDB 快照会丢失最后一次快照后的数据,AOF 模式有性能开销(appendfsync everysec 是常见折中)。如果追求绝对零丢失,必须接受 2x 内存空间的代价。
3. 协议限制:Redis 使用自定义 RESP 协议,二进制安全但调试不如 HTTP 直观。客户端库质量参差不齐,维护成本不容忽视。
4. 单线程的CPU瓶颈:单线程无法利用多核 CPU,在极端高负载场景(>10 万 QPS 且 CPU bound)可能成为瓶颈。解决方案是业务侧做 key 分片(hash tag),或使用 Redis Cluster 分片部署。
Redis 已经不是「一个开源项目」,而是现代互联网架构的基础组件。它的影响力体现在:
项目仓库本身的默认分支名为 unstable(而非 main 或 master),体现了 Redis 团队「永远追求最新」的开发哲学——每个 release 都是稳定版,但开发分支永远面向下一个重大突破。
总结:Redis 是每个后端开发者都应该掌握的数据工具。它用极简的哲学实现了极致的性能,用丰富的数据结构覆盖了从缓存到 AI 搜索的广泛场景。无论你是构建一个每日 PV 百万的个人博客,还是日活数千万的互联网产品,Redis 都能在你的架构中找到它的位置。