redis 图解缓存雪崩、击穿、穿透、预热、热备
缓存雪崩,缓存穿透,缓存预热,缓存热备,这些是redis在实际工作场景中经常会碰到的问题,也是面试中必会的基础知识。
缓存雪崩
当出现大量的请求需要进行访问数据库获取数据,由于先会访问redis中查看缓存中有没有该字段的数据,如果有就直接从redis中读取,但是当redis崩了,大量的请求会直接涌入数据库,从而使数据库瘫痪。
解决方案:
使用多台redis建立缓存服务器集群,实现redis高可用,一台坏了,还有别的兄弟。
缓存击穿
如果我们没有在redis中找到我们要的字段,而数据库中是有我们要的数据的。那么访问一次数据库在所难免,但是如果有一个高频字段没有存入redis,频繁的访问数据库从而导致很多数据穿过redis直接进入数据库,缓存的作用形同虚设。
解决方案:
将一些常用关键字尽快存入到redis中,即使这个字段为null,有时也是有必要的,或者在业务层对频繁的请求进行控制,也可以设置热点数据不过期。
缓存穿透
缓存穿透与缓存击穿有点像。两者的差别在于,缓存穿透是查找的数据是缓存和数据库中都不存在的(比如恶意请求,携带非正常的参数),而缓存击穿是查找的数据在数据库中有,但是缓存中没有。
解决方案:
可以在获取接口数据处进行拦截,对一些不合法参数的请求进行拦截处理,或者可以对这些不合法参数对应的value设置为null。
缓存预热
当我们刚刚建立redis或者redis集群,缓存中没有数据,那么在刚开始就有大量访问,redis就必然会出现缓存击穿的现象,这个时候就需要我们后台提前从数据库中拿一些数据出来存入redis中,让其产生作用
缓存热备
redis集群就是缓存热备很好的体现,当一台redis服务器崩了,其他redis的兄弟们也能顶上,缓存依旧可用。
参考:https://www.jianshu.com/p/19f111fcf47c