技术笔记

← 返回笔记列表

Redis 缓存设计与实战

📅 2026/03 🏷️ Redis 中间件

Redis 是一款高性能的内存键值数据库,常被用作缓存、消息队列、分布式锁等场景。本文从缓存的三大经典问题出发,讨论如何设计健壮的缓存方案。

一、常用数据结构

  • String:缓存对象、计数器
  • String类型介绍 String常用命令
  • Hash:存储结构化对象,适合购物车
  • Hash类型介绍 Hash常用命令
  • List:消息队列、时间线
  • List类型介绍 List常用命令
  • Set:去重、共同关注
  • Set类型介绍 Set常用命令
  • ZSet:排行榜、延迟队列
  • Zset类型介绍 ZSet常用命令

二、缓存三大问题

1. 缓存穿透

查询一个数据库中也不存在的数据,导致每次请求都打到 DB。解决方案:缓存空值、布隆过滤器、接口校验。

2. 缓存击穿

热点 key 突然失效,大量请求同时访问数据库。解决方案:互斥锁、逻辑过期、热点 key 永不过期。

3. 缓存雪崩

大量 key 同时过期,数据库压力骤增。解决方案:过期时间加随机值、多级缓存、熔断降级。

三、二级缓存方案

在本地缓存(Caffeine)+ 分布式缓存(Redis)组合下,既能降低 Redis 压力,又能保证多实例间的一致性。

  • 读:先查 Caffeine,再查 Redis,最后查 DB;命中后回填。
  • 写:更新 DB,然后删除 Redis,再通知本地缓存失效。
  • 设置合理的本地缓存 TTL,避免脏读。
缓存合理使用能极大提升性能,但一致性、容量、高可用都需要仔细设计。