什么是缓存雪崩、缓存穿透、缓存击穿以及解决方案

什么是缓存雪崩、缓存穿透、缓存击穿以及解决方案

redis是面试中经常问到的,题目也非常多。缓存雪崩、缓存穿透、缓存击穿比较有代表性,这里记录一下。
在这里插入图片描述

缓存雪崩

缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。
解决方案
在做电商项目的时候,一般是采取不同分类商品,缓存不同周期。在同一分类中的商品,加上一个随机因子。这样能尽可能分散缓存过期时间,而且,热门类目的商品缓存时间长一些,冷门类目的商品缓存时间短一些,也能节省缓存服务的资源。
在这里插入图片描述

事前:

使用集群缓存,保证缓存服务的高可用

这种方案就是在发生雪崩前对缓存集群实现高可用,如果是使用 Redis,可以使用 主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃的情况。

事中:

ehcache本地缓存 + Hystrix限流&降级,避免MySQL被打死

使用 ehcache 本地缓存的目的也是考虑在 Redis Cluster 完全不可用的时候,ehcache 本地缓存还能够支撑一阵。

使用 Hystrix进行限流 & 降级 ,比如一秒来了5000个请求,我们可以设置假设只能有一秒 2000个请求能通过这个组件,那么其他剩余的 3000 请求就会走限流逻辑。

然后去调用我们自己开发的降级组件(降级),比如设置的一些默认值呀之类的。以此来保护最后的 MySQL 不会被大量的请求给打死。

事后:

开启Redis持久化机制,尽快恢复缓存集群

一旦重启,就能从磁盘上自动加载数据恢复内存中的数据。

防止雪崩方案如下图所示:
在这里插入图片描述

缓存穿透

缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。
解决方案
采用缓存空值的方式,如果从数据库查询的对象为空,也放入缓存,只是设定的缓存过期时间较短,比如设置为60秒
在这里插入图片描述

缓存击穿

缓存击穿是指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db。
解决方案
可以将热点数据的过期时间设置为永久有效
在这里插入图片描述

小总结

缓存雪崩,是对key大量失效的情况、缓存穿透,是对key不存在的情况、缓存击穿,是对热点数据来说的。

参考

实例——解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
什么是缓存雪崩、缓存穿透、缓存击穿以及解决方案
阿里一面:关于【缓存穿透、缓存击穿、缓存雪崩、热点数据失效】问题的解决方案
缓存世界中的三大问题及解决方案
Redis常见面试题

猜你喜欢

转载自blog.csdn.net/e891377/article/details/108811639
今日推荐