Redis 简介与历史
在动手安装之前,我们先弄清楚 Redis 到底是什么、为什么会诞生、凭什么这么快。理解了它的设计哲学,后面学命令、学持久化、学场景时会事半功倍。
什么是 Redis
Redis(Remote Dictionary Server,远程字典服务)是开源的内存数据结构存储系统。它的核心特征只有一句话:所有数据放在内存里,读写都直接操作内存,完全不碰硬盘(除了可选的持久化)。
这一句特征带来的直接后果就是——快。传统数据库(MySQL、PostgreSQL)每次读写都要走硬盘 I/O,单实例每秒几千到几万次请求就到瓶颈;而 Redis 单实例每秒能轻松处理 10 万级请求,延迟通常在亚毫秒级。这就是它成为现代后端"提速"首选的根本原因。
# Redis 命令在线试用(redis-cli 内)
127.0.0.1:6379> SET greeting "hello"
OK
127.0.0.1:6379> GET greeting
"hello"
# 1 秒内可以执行十万次以上这样的命令诞生故事:从"救火"到明星项目
Redis 的作者是意大利工程师 Salvatore Sanfilippo,网名 antirez。2009 年,他在自己的创业公司做一款实时分析产品,原本用 MySQL 存储实时统计数据,但面对高并发写入和频繁的"按时间窗口筛选"操作,MySQL 撑不住。
他先用 Memcached 缓解,但 Memcached 只能存纯字符串、不能做计数自增、不能按模式批量管理 key——满足不了业务需求。于是他干脆自己写了一个,起名 Redis。开源后迅速火爆,成为 GitHub 上最早一批破万 star 的项目。后来 antirez 全职维护 Redis 长达十年,2018 年起逐渐交棒给 Redis Labs(现 Redis Inc.),自己回归独立开发者身份。
今天 Redis 已是事实标准:GitHub、Stack Overflow、Twitter、Instagram、阿里巴巴、字节跳动——几乎所有"用户量巨大"的互联网产品都在用。它的官网 redis.io 文档极其完善,每条命令都能在线试用。
Redis 为什么这么快
"内存存储"只是其中一个原因,Redis 的快是多重设计叠加的结果:
- 纯内存操作:数据放在内存,读写不经硬盘。这是最根本的速度来源——内存访问比硬盘快几万到几十万倍。
- 单线程命令处理:Redis 的核心命令执行在单个线程里完成,避免了多线程切换、加锁解锁的开销。听起来"单线程慢"是错觉——因为不做锁竞争,反而比多线程更快地处理高并发。注意这里指"命令执行"单线程,持久化、删除大 key 等会在后台线程做。
- 基于 Reactor 模式的 I/O 多路复用:用
epoll(Linux)/kqueue(Mac)/select一次监听 thousands 个客户端连接,有事件才处理,空闲时不消耗 CPU。 - 高效的自实现数据结构:SDS(简单动态字符串)、压缩列表、跳表、字典——每种都为特定场景做了优化,操作复杂度可控。
- 协议简单:RESP(REdis Serialization Protocol)是文本协议,易解析、好调试,客户端实现成本低。
一句话总结:把"快"做到了极致——内存 + 单线程 + 多路复用 + 高效数据结构,四者缺一不可。
Redis vs 其他数据库
+-----------+----------+------------+----------+
| 存储 | 速度 | 数据模型 | 典型用法 |
+-----------+----------+------------+----------+
| MySQL | 慢(硬盘) | 关系表 | 主数据库 |
| MongoDB | 中 | 文档 JSON | 主数据库 |
| Redis | 极快(内存)| key-value | 缓存/辅助 |
| Memcached | 极快(内存)| 纯字符串 | 纯缓存 |
+-----------+----------+------------+----------+
# Redis 既能当缓存,又能做队列、排行榜、会话——
# 这是它比 Memcached 受欢迎的根本原因。需要特别强调:Redis 通常不做主数据库。它的角色是"加速器"和"辅助存储"——存那些访问频繁、可以重建、需要极速响应的数据。主数据仍放在 MySQL/MongoDB,Redis 配合使用。原因有两个:内存贵(同等容量比硬盘贵几十倍),以及 Redis 的关系查询能力弱(没有 JOIN)。
Redis 不只是"缓存"
很多人把 Redis 等同于"缓存",这是误解。Redis 内置了多种数据结构,每种都配了一批专用命令,所以它能胜任远超缓存的场景:
- 缓存:加速数据库查询结果,减轻主库压力(最常见用途)。
- 会话存储(Session):分布式系统里把用户登录态放 Redis,多台服务器共享。
- 计数器/限流:用
INCR做点赞数、PV、API 限流,原子且极速。 - 消息队列:用 list 实现简单队列,或用 5.0 引入的 Stream 做生产级队列。
- 排行榜:用有序集合(sorted set)做实时排名,毫秒级返回前 N 名。
- 分布式锁:用
SET NX EX实现跨进程互斥锁。 - 发布订阅:聊天室、配置广播、实时通知。
正因为这种"瑞士军刀"特性,后端工程师几乎每天都会和 Redis 打交道。学透 Redis,是后端工程师进阶的必经之路。
它能"持久化"吗?
很多人有疑问:既然数据在内存,断电不就全没了?Redis 提供了两种持久化机制(可单独开,也可同时开):
- RDB(Redis Database):周期性地把整个数据集快照写入硬盘的一个 .rdb 文件。文件小、恢复快,但可能丢失最近几分钟的数据。
- AOF(Append Only File):把每条写命令追加到日志文件。可以做到"最多丢 1 秒",更安全,但文件大、恢复慢。
还有主从复制(master-slave)、哨兵(Sentinel)自动故障转移、集群(Cluster)分片——撑住生产级高可用。这些我们后面有专门章节讲。
该不该学 Redis?
如果你的方向是后端开发、运维、DevOps、基础架构,Redis 几乎是必修课——后端面试的高频题、生产系统的常见组件、性能优化的重要工具。学完本系列,你将能独立设计一个带缓存的 Web 服务、用 Redis 做排行榜和消息队列、看懂生产环境的持久化配置。
← 返回 Redis 教程目录
下一篇 Redis 环境安装与 redis-cli →