Redis 简介与核心特性
本教程共 40 篇 · 第 1 篇 · 更新于 2026-08-02
1. Redis 简介与核心特性
本节目标
- 理解 Redis 是什么,以及它「内存数据结构服务器」的定位
- 掌握 Redis 的 6 大核心特性(高性能、丰富数据结构、原子性、持久化、高可用、扩展能力)
- 能列举 Redis 最常见的 6 类应用场景
- 说清楚 Redis 与 Memcached、关系型数据库的本质区别
- 用 redis-cli 跑通第一个
PING/SET/GET示例
1-1 Redis 是什么
Redis 是 REmote DIctionary Server(远程字典服务器)的缩写,由意大利开发者 Salvatore Sanfilippo(网名 antirez)于 2009 年发布。它是一个开源的、基于内存的键值(key-value)数据库,但和人们印象里「只能存字符串」的简单缓存不同,Redis 更准确地定位是一个「数据结构服务器(data structure server)」。
从 Redis 8.0 起,原先的「Redis Community Edition(社区版)」正式更名为 Redis Open Source(开源版);同时,过去需要单独安装扩展包(Redis Stack)才能用上的 JSON、时间序列、概率类型(Bloom、Cuckoo、Top-K、T-Digest 等)、向量集与查询引擎,在 Redis 8 中已经内置到发行版里。换句话说,现在下载一个 Redis 8.x,你就已经拥有了过去「Redis Stack」的全部能力。
提示:版本基线说明。本教程以 Redis 8.x 最新稳定版 为准(GitHub 上的最新发布标签为
8.10.0)。需要留意的是,redis.io 官方下载页仍把8.8标注为 “Latest stable”,二者同属 8.x 大版本,命令与数据类型层面差异极小,本教程统一按 8.10.0 行文。后续遇到 7.x → 8.x 的重要变化或 8.x 新特性,都会用「提示」块特别标注。
Redis 把数据主要放在内存中,因此读写延迟通常可以做到亚毫秒级(sub-millisecond);同时它又通过持久化机制把内存数据落盘,从而兼得「快」与「不丢数据」。
1-2 用 redis-cli 打个招呼
安装好 Redis 后(安装方法见下一章),启动服务并在另一个终端执行 redis-cli,就能用最简单的命令验证它是否工作:
redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> SET greeting "hello redis"
OK
127.0.0.1:6379> GET greeting
"hello redis"
127.0.0.1:6379> INCR counter
(integer) 1
127.0.0.1:6379> INCR counter
(integer) 2
上面这段示例已经体现了 Redis 的几个关键特征:PING 返回 PONG 表示服务存活;SET/GET 操作字符串;INCR 把一个「看起来是数字」的字符串原子地加一。这种「命令进、结果出」的交互,是学习 Redis 的基本方式。
1-3 六大核心特性
(1)性能极高
Redis 将数据存放在内存里,并使用经过高度优化的 C 语言数据结构,单机即可轻松支撑每秒十万级甚至百万级的读写操作(具体数字取决于实例规格、命令类型与网络)。官方给出的经验区间是:读约 10 万+ 次/秒、写约 8 万+ 次/秒的量级。由于访问路径短、没有磁盘寻道开销,它在缓存、会话、排行榜等「要快」的场景里几乎是默认选择。
(2)丰富的数据结构
这是 Redis 区别于普通 key-value 存储最关键的卖点。它不只能存「一个字符串」,还内建了:
- String(字符串):文本、数字、序列化对象、二进制流
- Hash(哈希):字段-值映射,适合存对象
- List(列表):按插入顺序排序的字符串序列,可做队列/栈
- Set(集合):无序、唯一的字符串集合,支持交并差运算
- Sorted Set(有序集合):带 score 的唯一集合,天然适合排行榜
- Bitmaps / Bitfields:在字符串上的位操作
- HyperLogLog:基数估算
- Geospatial:地理空间索引
- Stream:追加式日志,支持消费组
- JSON / 向量集 / 概率类型(Bloom、Cuckoo、Top-K、T-Digest、Count-Min Sketch)/ 时间序列:Redis 8.x 已内置
这些结构让「缓存」「队列」「计数器」「排行榜」「去重」「附近的人」等需求都能用原生命令直接实现,而不必在应用层拼装。
(3)原子性操作
Redis 是单线程处理命令的(指「执行命令」这一核心路径;持久化、异步删除、网络 IO 等由额外线程承担)。单线程模型带来一个巨大好处:每条命令天然原子执行,不会出现两个客户端同时修改同一个 key 而互相打断的情况。像 INCR、HINCRBY、LPUSH 这类「读-改-写」操作,在并发下也是安全的。需要把多条命令打包成「要么全做、要么不做」的事务时,还可以用 MULTI/EXEC(后续章节讲解)。
(4)持久化
内存快,但断电会丢。Redis 提供两种互补的持久化方案:
- RDB:在指定时间点对内存做快照(snapshot),文件紧凑、恢复快。
- AOF:把每一条写命令以日志形式追加保存,数据安全性更高,可配置每秒或每次落盘。
两者可以同时开启,Redis 重启时优先用 AOF 恢复以保证数据更完整。生产环境几乎总是开启至少一种持久化。
(5)高可用与可扩展
Redis 内建:
- 主从复制(Replication):从节点复制主节点数据,用于备份和分摊读压力。
- 哨兵(Sentinel):自动监控并在主节点宕机时完成故障转移。
- 集群(Cluster):数据分片到 16384 个槽(slot),支持水平扩展。
这使得 Redis 既能当缓存,也能当「需要高可用」的主存储组件。
(6)扩展能力
除了丰富内建类型,Redis 还通过 Modules API 允许社区和官方扩展新命令、新数据类型。Redis 8 把过去流行的扩展(JSON、搜索与查询、概率结构、向量集)直接做成内置模块,开发者无需额外安装即可使用。
1-4 典型应用场景
| 场景 | 用到的能力 | 说明 |
|---|---|---|
| 缓存(Cache) | String + 过期时间 | 把数据库热点数据放内存,降低后端压力 |
| 分布式会话(Session) | String / Hash / JSON | 多实例共享登录状态 |
| 排行榜 | Sorted Set | 用 ZADD/ZRANGE 实时排名 |
| 计数器 / 限流 | String INCR、Hash HINCRBY | 文章阅读量、接口限流 |
| 消息队列 | List(LPUSH/BRPOP)、Stream | 异步任务、事件流 |
| 实时分析 | HyperLogLog、概率类型 | UV 统计、Top-K 热词 |
| 地理附近的人 | Geospatial | 半径查询 |
| 向量检索 / AI 记忆 | 向量集 | 语义搜索、RAG、LLM 缓存 |
1-5 Redis 与「其他存储」的区别
Redis vs Memcached
两者都是内存键值缓存,但 Redis 数据类型更丰富(Memcached 只有简单的 key-value),并且 Redis 支持持久化、复制、Lua 脚本、事务、发布订阅等,能力边界远超缓存。Memcached 在「超简单纯缓存」场景里依然轻量好用,但 Redis 几乎总能覆盖它。
Redis vs 关系型数据库(MySQL 等)
关系型数据库把数据放在磁盘、支持 SQL、强一致、适合复杂联表查询与事务;Redis 把数据放内存、没有 SQL、以命令方式访问、单条命令原子、适合低延迟高并发的访问模式。二者通常是互补关系:MySQL 做源数据与主存储,Redis 做前置缓存或特定结构(排行榜、队列)的加速层。
Redis vs 其他 NoSQL(如 MongoDB)
MongoDB 是面向文档的磁盘型数据库,擅长存复杂文档、做聚合分析;Redis 是内存型、以数据结构为中心,胜在速度与原子操作。选谁取决于「要持久文档 + 复杂查询」还是「要极速访问 + 特定结构」。
1-6 常见误区
- 误区一:Redis 只能做缓存。 错。它可做主存储、消息队列、排行榜、会话、限流、向量检索等,缓存只是最经典的一种用法。
- 误区二:内存数据库一断电全丢。 错。RDB/AOF 持久化可以把数据落盘,重启后恢复。
- 误区三:单线程 = 性能差。 错。正是因为单线程避免了锁竞争与上下文切换,配合内存访问,Redis 反而极快;瓶颈通常在网络或内存容量,而非 CPU 核数。
- 误区四:value 最大 512MB 所以很够用。 这没错,但要警惕「大 key」——一个几十 MB 的 String/Hash/List 会拖慢删除与迁移,生产环境应避免。
1-7 小结
Redis 是一个以内存为主、以数据结构为核心的「瑞士军刀式」数据库:它既快(亚毫秒延迟)、又安全(原子 + 持久化 + 高可用)、还灵活(十多种数据类型 + 可扩展)。理解了它的定位与特性,你就掌握了后续所有章节的「为什么」。
提示:版本基线说明。本教程正文统一以 Redis 8.x(最新稳定版) 表述。需要留意:官方 redis.io 下载页目前把
8.8标注为 “Latest stable”,而 GitHub 上 redis/redis 的最新发布标签为8.10.0;二者同属 8.x 大版本,命令与数据类型差异极小,本教程以8.10.0为准。
下一章我们将在 Linux / macOS / Windows / Docker 上把 Redis 8.x 真正安装起来。