侧边栏壁纸
博主头像
bugbbs博主等级

行动起来,活在当下

  • 累计撰写 5 篇文章
  • 累计创建 4 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(超详解)

Administrator
2024-04-10 / 0 评论 / 0 点赞 / 93 阅读 / 2558 字

一、缓存穿透

1.什么是缓存穿透

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库,从而增加数据库的压力,降低系统的性能。

2.缓存穿透解决方案:

  • 缓存空对象:在缓存中存储null的键,设置较短的过期时间,可以避免短时间的缓存穿透,防止恶意攻击

  • 布隆过滤器:在查询前先通过布隆过滤器快速判断查询的数据是否存在,若不存在则不再访问缓存和数据库,减轻数据库压力。

二、缓存雪崩

1.什么是缓存雪崩

缓存雪崩是指在同一时段大量缓存同时失效或过期或者Redis服务宕机,导致大量请求打到数据库,给数据库带来巨大压力,从而引发数据库性能下降,甚至系统崩溃。

2.缓存雪崩解决方案

  • 设置随机过期时间:为了避免大量缓存同时失效,可以为不同的缓存设置稍有差异的过期时间,分散同一时段缓存过期的可能性。

  • 二级缓存机制:使用多级缓存,将数据同时存储到多个缓存层,一级缓存失效时可以从二级缓存中获取数据,避免所有缓存同时失效。

  • 缓存预热:在系统低峰期,提前加载热门的缓存数据,避免在高峰期同时加载大量缓存数据。


三、缓存击穿

1.什么是缓存击穿

缓存击穿是指在使用缓存系统时,一个高并发、经常被访问的数据缓存过期或失效时,大量并发请求同时涌入,直接访问数据库,导致数据库负载剧增,造成系统性能下降甚至崩溃的情况。

2.缓存击穿解决方案

  • 加互斥锁机制:在缓存失效时,只允许一个请求访问数据库,并将结果缓存,其他请求等待并从缓存中获取数据。

  • 逻辑过期异步更新缓存:当某个热点数据的逻辑时间过期时,可以使用异步任务来更新缓存,先返回旧的缓存结果给请求,然后在后台异步更新缓存。

0

评论区