1.缓存穿透
一次请求过来,根据参数去查,缓存中没有,数据库中也没有,就一直造成所有的请求直接都打到数据库,可能使数据库挂掉。
a.参数校验,直接拦截一部分非法参数的恶意请求
b.可以把不存在的key存到缓存中设为null,下次请求就可以走缓存返回null。
c.使用布隆过滤器,但是布隆过滤器最致命的问题是:如果数据库中的数据更新了,需要同步更新布隆过滤器。但它跟数据库是两个数据源,就可能存在数据不一致的情况。
2.缓存击穿
某一时刻热点key过期,假设此刻有很多请求,就会导致在缓存生成前所有的请求都直接打到库中,可能数据库挂掉
a.定时任务自动续期
b.热点数据永不过期,手动生成,手动删除
3.缓存雪崩
缓存雪崩是缓存击穿的升级版,缓存击穿说的是某一个热点key失效了,而缓存雪崩说的是有多个热门key同时失效。就会造成大量的请求,透过缓存,而直接访问数据库。
a.过期时间设置随机数,避免同时过期
b.缓存服务高可用,集群
c.服务降级.比如有10个请求在最近一分钟内,从redis中获取数据失败,则全局开关打开。后面的新请求,就直接从配置中心中获取默认的数据。当然,还需要有个job,每隔一定时间去从redis中获取数据,如果在最近一分钟内可以获取到两次数据(这个参数可以自己定),则把全局开关关闭。后面来的请求,又可以正常从redis中获取数据了

441

被折叠的 条评论
为什么被折叠?



