1. "缓存"是什么?为什么网站需要缓存?

📒 类比——记笔记:
查资料:每次都要翻整本大词典(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 = 带排名的榜单(分数越高排越前)

🎯 面试常问"某个场景用什么类型"

  • 排行榜 → ZSet(分数排序天生支持)
  • 浏览数/点赞数 → String 的 INCR
  • 用户信息 → Hash(改一个字段不影响其他)
  • 去重 → Set;最新 N 条 → List

4. Redis 学习路径

  1. 本篇:缓存直觉 + 五大类型 ✅ → 安装 Redis 敲一遍命令
  2. 数据结构:底层实现(SDS/跳表)、为什么快
  3. 持久化:RDB/AOF——数据怎么不丢
  4. 缓存经典问题:穿透/击穿/雪崩——面试重灾区
  5. 分布式锁、高可用、淘汰策略:进阶
  6. 动手:Spring Boot 集成 Redis(spring-boot-starter-data-redis),写缓存+排行榜 demo

🎯 常见误区

  • 误区 1:"Redis 能当数据库用"——它主要职责是缓存,数据可靠性不如 MySQL(虽然能持久化)
  • 误区 2:"Redis 是单线程所以慢"——恰恰相反,单线程避免锁竞争,内存操作快
  • 误区 3:"缓存越多越好"——缓存不一致、缓存穿透等问题会随之而来(cache-problem 页详解)

🎤 常见面试追问

  1. Redis 为什么快?——内存操作(微秒级)+ 单线程无锁竞争 + IO 多路复用(一个线程管所有连接)+ 高效数据结构。单线程反而省了锁的开销。
  2. Redis 和 MySQL 怎么配合?——MySQL 存全量数据(磁盘,可靠),Redis 缓存热点数据(内存,快)。读:先查缓存再查库回填;写:先更新库再删缓存。
  3. Redis 的数据会丢吗?——会:进程崩溃时 AOF/RDB 之间窗口的数据会丢;内存淘汰也会丢(缓存语义)。所以只放"能容忍丢失"的热点数据,别当主存储。

📖 名词解释(本页术语)

术语 大白话解释
缓存(Cache)把常用数据放在更快的存储里(内存),读快 100 倍。相当于"小本子"记常用信息。
Redis最流行的内存键值数据库:SET/GET 操作,五大类型,单线程高并发。
键值对(Key-Value)Redis 的存储模型:一个键对应一个值,像字典。键命名如 user:1:name。
内存 vs 磁盘内存快(微秒)但断电丢;磁盘慢(毫秒)但持久。MySQL 磁盘 / Redis 内存,这就是快慢差 100 倍的原因。
单线程模型Redis 命令处理是单线程(省锁),靠 IO 多路复用支撑高并发——所以命令要快,避免大 key 和慢命令。
TTL(过期时间)键的存活时间,到点自动删除(EXPIRE 命令)。缓存防"脏数据常驻"的机制。
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。