🚪 Redis 入门篇(零基础版)
缓存是什么 · Redis 是什么 · 五大类型速记 · 为什么 Redis 快 · 和 MySQL 的关系
1. "缓存"是什么?为什么网站需要缓存?
📒 类比——记笔记:
查资料:每次都要翻整本大词典(MySQL,慢)→ 太慢!
缓存 = 把经常查的内容抄在小本子上(Redis,快)——先看小本子,没有再去翻大词典。
词典=数据库(全、准、慢);小本子=缓存(快,但只有常用的一部分)。
查资料:每次都要翻整本大词典(MySQL,慢)→ 太慢!
缓存 = 把经常查的内容抄在小本子上(Redis,快)——先看小本子,没有再去翻大词典。
词典=数据库(全、准、慢);小本子=缓存(快,但只有常用的一部分)。
为什么快:数据库查数据要读磁盘(毫秒级);Redis 的数据存在内存(微秒级)——快 100 倍以上。
典型场景:商品详情、热搜榜、登录 session、秒杀库存——都是"读多写少"的数据,放缓存。
🎯 记住
- 缓存 = 内存里的"小本子",存常用数据,读取快 100 倍
- MySQL(磁盘,全量数据) + Redis(内存,热点数据)= 标配组合
- Redis 数据可能丢(重启/淘汰),所以它只放"能容忍丢失"的数据——重要数据还是要落 MySQL
2. Redis 是什么?它和 MySQL 有什么区别?
| 对比 | MySQL | Redis |
|---|---|---|
| 数据存哪 | 磁盘(重启不丢) | 内存(断电可能丢,可配置持久化) |
| 速度 | 毫秒级 | 微秒级(快 100+ 倍) |
| 数据模型 | 表(行/列) | 键值对 + 5 种类型 |
| 容量 | TB 级 | 受内存限制(GB 级) |
| 角色 | 数据的老家(最终存储) | 数据的快车道(加速) |
Redis = Remote Dictionary Server(远程字典服务器):一个"键值对"的内存数据库。
操作极简单:SET name 小明(存)、GET name(取)——比 SQL 简单多了。
Redis 命令速体验
# 在 redis-cli 里敲:
> SET user:1:name 小明 # 存(键=user:1:name,值=小明)
OK
> GET user:1:name # 取
小明
> EXPIRE user:1:name 60 # 60 秒后自动消失(过期)
> INCR page_view # 自增 1(计数器神器)
🎯 记住
- Redis = 内存键值数据库;SET/GET 是它的"Hello World"
- 键命名习惯:类型:ID:字段(user:1:name)——像文件路径
- 单线程 + 内存 = 快;命令是原子的(不怕并发)——这个后面详解
3. Redis 五大数据类型(面试第一问)
| 类型 | 是什么 | 例子命令 | 用在哪 |
|---|---|---|---|
| String | 最简单的字符串/数字 | SET / GET / INCR | 缓存、计数器 |
| Hash | 一个键下面多个字段(像对象) | HSET user:1 name 小明 | 存对象(用户信息) |
| List | 有序列表(可重复) | LPUSH / LRANGE | 最新消息列表 |
| Set | 集合(去重) | SADD / SINTER | 去重、共同好友 |
| ZSet | 有序集合(带分数) | ZADD / ZRANGE | 排行榜、延时队列 |
🧺 类比速记:
String = 一张纸条;Hash = 一张有多个格子的表格;List = 排队名单;
Set = 储物柜(一件东西只能放一次);ZSet = 带排名的榜单(分数越高排越前)
String = 一张纸条;Hash = 一张有多个格子的表格;List = 排队名单;
Set = 储物柜(一件东西只能放一次);ZSet = 带排名的榜单(分数越高排越前)
🎯 面试常问"某个场景用什么类型"
- 排行榜 → ZSet(分数排序天生支持)
- 浏览数/点赞数 → String 的 INCR
- 用户信息 → Hash(改一个字段不影响其他)
- 去重 → Set;最新 N 条 → List
4. Redis 学习路径
- 本篇:缓存直觉 + 五大类型 ✅ → 安装 Redis 敲一遍命令
- 数据结构:底层实现(SDS/跳表)、为什么快
- 持久化:RDB/AOF——数据怎么不丢
- 缓存经典问题:穿透/击穿/雪崩——面试重灾区
- 分布式锁、高可用、淘汰策略:进阶
- 动手:Spring Boot 集成 Redis(spring-boot-starter-data-redis),写缓存+排行榜 demo
🎯 常见误区
- 误区 1:"Redis 能当数据库用"——它主要职责是缓存,数据可靠性不如 MySQL(虽然能持久化)
- 误区 2:"Redis 是单线程所以慢"——恰恰相反,单线程避免锁竞争,内存操作快
- 误区 3:"缓存越多越好"——缓存不一致、缓存穿透等问题会随之而来(cache-problem 页详解)