1.1 什么是 Redis
本章目标:搞清楚 Redis 是什么、能干什么、为什么快。不需要动手,读完就行。
1. 一句话介绍
Redis 是一个把数据放在内存里的键值(Key-Value)数据库。
拆开来看这句话里的三个关键词:
- 键值数据库:存取数据的方式非常简单——给每份数据起个名字(key),通过名字存进去、通过名字取出来。就像一个巨大的字典/Map。
- 放在内存里:数据主要存在内存(RAM)中,而不是硬盘上。这是它快的根本原因。
- 数据库:虽然数据在内存里,但它支持把数据落盘保存,重启后数据还能恢复,所以它是数据库,不只是缓存工具。
一个直观的对比:
| MySQL 等关系型数据库 | Redis | |
|---|---|---|
| 数据存在哪 | 硬盘 | 内存 |
| 数据组织方式 | 表、行、列 | key → value |
| 查询方式 | SQL 语句 | 简单命令(GET / SET 等) |
| 单次操作速度 | 毫秒级 | 微秒级(快 100~1000 倍) |
| 适合场景 | 存储核心业务数据 | 缓存、计数、排行榜等高频读写场景 |
💡 记住:Redis 不是用来替代 MySQL 的,而是和它配合使用的。绝大多数系统是"MySQL 存全量数据 + Redis 存热点数据"。
2. Redis 能用来干什么?
新手最常见的疑问是:"我为什么需要它?" 看几个真实场景:
场景一:缓存(最主要的用途)
假设你做了一个商品详情页,每次打开都要查一次 MySQL。当每秒有 1 万人访问时,MySQL 就扛不住了。
解决方案:第一次查询后,把结果存进 Redis。后面的请求直接从 Redis 拿,速度快 100 倍,MySQL 压力骤降。
用户请求 → 先查 Redis
├── 查到了 → 直接返回(99% 的请求走这里)
└── 没查到 → 查 MySQL → 结果写入 Redis → 返回
场景二:计数器
文章阅读量、视频点赞数这类数字,每秒可能变化几千次。用 MySQL 频繁 UPDATE 会非常吃力,而 Redis 一条 INCR 命令就能原子地 +1,轻松扛住。
场景三:排行榜
游戏积分排行榜、热搜榜。Redis 的"有序集合(ZSet)"天生就是为这个设计的:插入分数后自动排序,取前 100 名只要一条命令。
场景四:其他常见用途
- Session 共享:多台服务器共享用户登录状态
- 分布式锁:多个服务抢同一个资源时排队
- 消息队列:简单的任务队列(List / Stream)
- 去重统计:今天有多少独立用户访问(Set / HyperLogLog)
3. Redis 为什么这么快?
面试高频题,新手阶段记住三点即可:
- 纯内存操作:内存的读写速度比硬盘快几个数量级,这是最主要的原因。
- 单线程处理命令:Redis 用单个线程执行命令,没有多线程的锁竞争和上下文切换开销。而且因为快,单线程也不会成为瓶颈。(Redis 6.0 之后网络 IO 部分引入了多线程,但执行命令依然是单线程。)
- 高效的数据结构 + IO 多路复用:底层数据结构经过精心优化;用 epoll 这类技术让单线程能同时服务成千上万个连接。
💡 "单线程"带来一个重要特性:Redis 的每条命令都是原子的,不会出现两条命令交叉执行到一半的情况。后面讲计数器、分布式锁时会反复用到这个特性。
4. Redis 的五大核心数据类型(先混个脸熟)
Redis 的 value 不只是字符串,它支持多种数据结构,这是它比 Memcached 等其他缓存强大的地方:
| 类型 | 长什么样 | 典型用途 |
|---|---|---|
| String(字符串) | "hello" / "123" | 缓存、计数器 |
| Hash(哈希) | {name: "张三", age: 20} | 存对象 |
| List(列表) | [a, b, c] 有序可重复 | 队列、最新动态 |
| Set(集合) | {a, b, c} 无序不重复 | 去重、共同好友 |
| ZSet(有序集合) | {a: 90分, b: 85分} 按分数排序 | 排行榜 |
第二部分会逐个详细讲解,现在只需要知道"Redis 有五种常用类型"就够了。
5. 小结
- Redis 是基于内存的键值数据库,速度是它的核心竞争力
- 最主要的用途是缓存,此外还有计数、排行榜、分布式锁等
- 它不替代 MySQL,而是与之配合
- 命令执行是单线程的,因此每条命令都是原子操作
下一章我们把 Redis 装起来 👉 1.2 安装与启动