跳到主要内容

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 的最大特点:

数据结构底层实现典型应用
StringSDS(简单动态字符串)缓存、计数器、分布式锁
Hash哈希表 / ziplist存储对象(用户信息)
List双向链表 / ziplist消息队列、时间线
Set哈希表 / intset标签、共同好友
Sorted Set跳表 + 哈希表排行榜、延迟队列
Bitmap字符串位操作签到、用户活跃统计
HyperLogLog概率算法UV 统计(误差 < 1%)
GEOSorted Set + geohash附近的人/店
为什么 Redis 这么快?
  1. 数据存储在内存中,读写不涉及磁盘 I/O
  2. 单线程执行命令,避免了多线程的上下文切换和锁竞争
  3. 基于 IO 多路复用(epoll)处理并发连接
  4. 高效的数据结构(如跳表、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,支持水平扩展

学习建议

推荐学习路径
  1. 数据结构 → 5 种基本类型 + 底层实现
  2. 持久化 → RDB vs AOF
  3. 缓存三大问题 → 穿透、击穿、雪崩(面试必考)
  4. 分布式锁 → SETNX、Redisson、RedLock
  5. 集群方案 → 主从复制 → 哨兵 → Cluster
  6. 淘汰策略 + 性能优化 → LRU/LFU、Pipeline、大 Key 治理

相关链接