后端与架构

Redis 缓存设计中最容易踩的五个坑

南客笔记 2026/11/10 1,560 次浏览

缓存能解决性能问题,也能制造性能问题。下面这五个坑,是我在几个真实项目里反复见到的。

一、缓存雪崩

大量 key 在同一时刻过期,请求瞬间全部打到数据库。解决办法是给过期时间加随机抖动:

const ttl = 300 + Math.floor(Math.random() * 60);
await redis.set(key, value, { EX: ttl });

二、缓存穿透

查询一个根本不存在的 key,每次都绕过缓存查库。可以用空值缓存或者布隆过滤器兜底。

三、大 key 与热 key

  • 单个 String 超过 10KB、Hash 元素超过 5000 个,就要考虑拆分
  • 热 key 可以增加本地缓存,减少网络往返

四、更新顺序混乱

推荐「先更新数据库,再删除缓存」,并对删除失败做重试补偿。不要试图用双写保证强一致,代价往往更高。

五、没有监控

命中率、内存使用、慢查询、连接数,这四项指标至少要能看到趋势。没有观测的缓存系统,出问题时只能靠猜。

缓存不是数据库的加速插件,而是一份独立维护的数据副本。
相关文章

深入理解 REST 与 GraphQL 选型

这是「REST 与 GraphQL 选型」主题下的一篇实践记录:深入理解 REST 与 GraphQL 选型。内容用于填充示例数据,方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里,REST 与 GraphQL 选型往往不是孤立的知识点,而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍…

南客笔记 2026/11/07 1,034

深入理解 Node.js 流式处理

这是「Node.js 流式处理」主题下的一篇实践记录:深入理解 Node.js 流式处理。内容用于填充示例数据,方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里,Node.js 流式处理往往不是孤立的知识点,而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍,遇到问题时才有判断依据。 实…

南客笔记 2026/11/06 1,169

深入理解 MySQL 事务隔离级别

这是「MySQL 事务隔离级别」主题下的一篇实践记录:深入理解 MySQL 事务隔离级别。内容用于填充示例数据,方便浏览分页、搜索结果与文章详情。 为什么关注这个主题 在真实项目里,MySQL 事务隔离级别往往不是孤立的知识点,而是和性能、稳定性、可维护性纠缠在一起。把它单独拿出来梳理一遍,遇到问题时才有判断依据。 实…

南客笔记 2026/11/05 1,303