参加过面试的同学们都应该知道,Redis常见面试题:Redis缓存穿透、缓存击穿、缓存雪崩
是面试官最最最最常问的问题之一,搞懂这几个名词之间的区别无疑会为你的面试过程增光添彩,接下来就这几个点进行详述。
key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。
通俗的说:
在某一时刻,突然有大量的请求去请求应用服务器,一般情况下,应用服务器会去Redis查询缓存数据,查到则返回数据,查不到,则去数据库差数据。但由于目前缓存中的大部分缓存数据都不存在,导致所有请求都去直接查询数据库,导致数据库压力一直增加,最终导致数据库崩溃,但是Redis服务一直处于平稳运行,但没起到作用,这就会导致缓存穿透。
现象
缓存穿透怎么产生?
空结果的过期时间
会很短,最长不超过五分钟bitmaps
类型定义一个可以访问的名单,名单id作为bitmaps的偏移量
,每次访问和bitmap里面的id进行比较,如果访问id不在bitmaps里面,进行拦截,不允许访问。key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
通俗的说:
Redis中的某个key失效了,大量的请求都在使用这个过期的key,导致无法命中Redis中的缓存数据,压力都给到了服务器查询源数据库,最终源数据库承受不了瞬时剧增的请求,然后崩溃。
现象
key
失效缓存击穿怎么产生?
key
过期,但更好失效的这个key有大量的请求进行访问,大量的请求都在使用失效的key
key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
缓存雪崩与缓存击穿的区别在于这里针对很多key缓存,前者则是某一个key
现象
缓存雪崩怎么产生?
本次分享的文章到这里就结束了,希望对大家有所帮助!!!