1.场景:面试环境
2.人物:你和面试官
3.面试题:
了解一下什么是redis的缓存穿透和雪崩,redis奔溃以后会发什么什么,作为系统方案的设计者,我们在方案开发时候要怎么去设计,来做到系统的高可用
4.面试官心理活动分析:
其实这个是问道缓存必问的一个话题,雪崩和穿透作为缓存最大的两个问题,一般不出新,一出现的话招招致命,因此这个是面试官必问的一个话题
5.面试题分析
那么作为面试者的我么,该怎么回答这一问题的?
缓存雪崩发生的原因是什么,想必大家都很清楚,如果不清楚的同学,自行去网上搜索一下,很简单的哦
问题的重点是针对缓存雪崩,我们该怎么去解决这个问题呢
那么我们就要从事前事中事后来分析:
事前:保证redis的高可用,主从+哨兵,redis cluster,避免出现全盘崩溃问题
事中:本地 ehcache缓存+hystrix限流&降级机制,限流主要避免redis挂掉的时候qps请求涌入mysql时候mysql被打死;
事后: redis持久化,从而可用快速恢复缓存的数据
上述就是缓存雪崩问题的解决方案,那么再来看看什么是缓存穿透,其实就是攻击者可以请求缓存中没有的键,造成缓存中没有命中相关的键值(而且数据库里曼也查不到对应的数据),造成请求直接进入数据库里面,大量请求可能会造成mysql被挂掉。
那么缓存穿透该怎么处理,这边一个简单的处理方法就是直接将查不到值得键得值定义为undefined
这样,下一个黑客在攻击类似的请求时候就可以直接在缓存中给其返回一个值就可以了。
以上就是针对缓存穿透问题做的一个简单地方案,当然在实际生产环境中,我们得根据生产实际情况进行相应的方案设计
现在,你清楚什么是缓存雪崩和穿透问题了吗,生产环境中,针对这些问题,学会怎么处理了吗,长城不是一日建成的,同学们需要继续努力!