缓存穿透
缓存穿透的解释是,数据既不在缓存中也不存在于数据库中,造成每次查询都会对缓存和数据库进行查询。比如:有人恶意用不存在的id参数进行接口调用,每次调用都需要穿透缓存进行数据库查询;
缓存穿透解决方案
ip限流:
参数合法性验证:
布隆过滤器(存在问题):
缓存空值;
缓存击穿
缓存击穿的原因是某个热点数据的缓存失效,导致大量的请求直接进行数据库查询
缓存击穿的解决方案:
热点数据访问加锁
自动续期
缓存不过期
缓存雪崩
前面已经聊过缓存击穿问题了。
而缓存雪崩是缓存击穿的升级版,缓存击穿说的是某一个热门key失效了,而缓存雪崩说的是有多个热门key同时失效。看起来,如果发生缓存雪崩,问题更严重
雪崩可能的原因:
1.缓存服务器down机
2.多个热点数据同时失效
雪崩的解决方案:
1.过期时间设置增加随机数或设置永不过期
2.缓存服务器高可用
以上的方案都是针对具体问题的解决方案,在实际生产中,有一些通用的解决方案
1.合理的限流策略
2.增加系统各部分的报警阈值并积极响应
3.数据合法性判断,将非法请求在最开始就拦截住
4. 合理的规划系统资源,并及时根据重大事件或者活动进行资源的拓展和响应升级;