Redis 知识体系概览
什么是 Redis?
Redis(Remote Dictionary Server) 是一个开源的基于内存的键值存储系统,可以用作数据库、缓存和消息代理。它之所以"快",是因为所有数据都存储在内存中(而非磁盘),读写速度可达10 万+ QPS。
Redis 在后端系统中的角色就像"高速缓冲区"——把频繁访问的数据(如用户信息、热门商品、Session)缓存在 Redis 中,避免每次都去查数据库,从而大幅降低数据库压力、提升接口响应速度。
为什么 Redis 如此重要?
| 场景 | 说明 |
|---|---|
| 缓存 | 最核心的应用——将 MySQL 热数据缓存到 Redis,减少数据库查询 |
| 分布式锁 | 用 SETNX + 过期时间实现分布式系统中的互斥操作 |
| 排行榜 | 用 Sorted Set(有序集合)实现实时排行 |
| 限流 | 用计数器或令牌桶算法实现接口限流 |
| 消息队列 | 用 List 的 LPUSH/BRPOP 或 Stream 实现简单消息队列 |
| Session 共享 | 分布式系统中多个服务共享 Session |
核心知识点
数据结构——不只是 Key-Value
Redis 不是简单的 Key-Value 存储,它支持丰富的数据结构,这是它区别于 Memcached 的最大特点:
| 数据结构 | 底层实现 | 典型应用 |
|---|---|---|
| String | SDS(简单动态字符串) | 缓存、计数器、分布式锁 |
| Hash | 哈希表 / ziplist | 存储对象(用户信息) |
| List | 双向链表 / ziplist | 消息队列、时间线 |
| Set | 哈希表 / intset | 标签、共同好友 |
| Sorted Set | 跳表 + 哈希表 | 排行榜、延迟队列 |
| Bitmap | 字符串位操作 | 签到、用户活跃统计 |
| HyperLogLog | 概率算法 | UV 统计(误差 < 1%) |
| GEO | Sorted Set + geohash | 附近的人/店 |
为什么 Redis 这么快?
- 数据存储在内存中,读写不涉及磁盘 I/O
- 单线程执行命令,避免了多线程的上下文切换和锁竞争
- 基于 IO 多路复用(epoll)处理并发连接
- 高效的数据结构(如跳表、SDS、ziplist)
持久化——内存数据不丢失
Redis 是内存数据库,宕机后数据会丢失。持久化机制把内存数据保存到磁盘:
| 方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| RDB(快照) | 定期将内存数据 fork 子进程写入 .rdb 文件 | 恢复速度快、文件紧凑 | 可能丢失最后一次快照后的数据 |
| AOF(追加日志) | 记录每条写命令到 .aof 文件 | 数据安全性高(可配置 1 秒同步) | 文件大、恢复速度慢 |
| 混合持久化 | RDB + AOF 结合(Redis 4.0+) | 兼顾速度和安全 | 推荐生产使用 |
缓存三大问题
| 问题 | 描述 | 解决方案 |
|---|---|---|
| 缓存穿透 | 查询不存在的数据,缓存和数据库都没有 | 布隆过滤器、缓存空值 |
| 缓存击穿 | 热点 Key 过期瞬间大量请求打到数据库 | 互斥锁、逻辑过期、永不过期 |
| 缓存雪崩 | 大批 Key 同时过期或 Redis 宕机 | 过期时间加随机值、多级缓存、降级 |
分布式锁——多实例的"互斥协调"
// Redis 分布式锁基本实现
// SET key value NX EX 30(原子操作:不存在才设置,30秒过期)
Boolean locked = redisTemplate.opsForValue()
.setIfAbsent("lock:order:" + orderId, requestId, 30, TimeUnit.SECONDS);
生产环境推荐使用 Redisson 客户端——它封装了可重入锁、看门狗(自动续期)、RedLock 等高级特性。
集群方案——高可用与水平扩展
| 方案 | 说明 |
|---|---|
| 主从复制 | 一主多从,从节点只读,主节点故障需手动切换 |
| 哨兵模式 | 哨兵节点监控主节点,自动故障转移 |
| Redis Cluster | 去中心化,数据分片到 16384 个 hash slot,支持水平扩展 |
学习建议
推荐学习路径
- 数据结构 → 5 种基本类型 + 底层实现
- 持久化 → RDB vs AOF
- 缓存三大问题 → 穿透、击穿、雪崩(面试必考)
- 分布式锁 → SETNX、Redisson、RedLock
- 集群方案 → 主从复制 → 哨兵 → Cluster
- 淘汰策略 + 性能优化 → LRU/LFU、Pipeline、大 Key 治理