狂神视频:https://www.bilibili.com/video/BV1S54y1R7SB?p=36
缓存穿透
查不到
缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,要是有人利用不存在的key频繁攻击我们的应用,服务就有可能会挂掉。
解决方法
1、业务层校验
对用户发送的请求进行校验,对明显错误的参数 进行拦截。如某个key只能是正数,请求是负数,直接返回错误请求。
2、对不存在的数据设置短过期时间
对某个查询不到的数据,将这个key设置成空访进缓存,并且设置一个短过期时间。
3、布隆过滤
是一种数据结构,通过哈希算法可以判断某个数据存在,但是只能判断一定不存在,不能判断一定存在。
缓存击穿
查的人太多
缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
典型:
微博热搜导致微博宕机;
双十一热门商店过0点缓存刷新,用户抢购,一瞬间大量并发请求发送到后端db,压垮服务器
解决方法
1、设置热点不过时
比较暴力的方法,将热点信息设置成融不过期。
2、提前定时更新