Skip to content

缓存击穿

在高并发访问下,某个热点key突然失效,大量请求直接查询数据库,对数据库造成很大压力。
解决方案:

  • 设置热点数据永不过期:热点数据会经常访问,可以设置过期时间很长或者永不过期。
  • 互斥锁:加锁控制对数据库的访问,确保只有一个请求去查询数据库数据并更新到缓存。

缓存穿透

请求的数据在缓存和数据库中都不存在,每次都是绕过缓存直接查数据库,导致数据库压力增加。 解决方案:

  • 缓存空对象:当缓存没有,直接查数据库也没有的时候,直接缓存一个null,设置比较短的过期时间。
  • 请求参数合法性校验:缓存穿透有一部分原因是非法攻击,可以对请求参数等做合法性校验。防止查缓存和数据库。
  • 布隆过滤器

缓存雪崩

某一时刻或某个时间段,大量缓存数据共同过期,导致请求大量打到数据库上。或者由于分布式缓存节点故障导致缓存失效。 解决方案:

  • 过期时间设置随机值:避免大量缓存同时间过期。
  • 加锁或使用队列:用锁或队列将请求排队。
  • redis集群:使用redis集群部署。

Released under the MIT License.