一. 概念
redis击穿或者穿透有一个前置条件:一定是高并发的情况下才会发生。
一般系统的架构设计会在ngnix或者其他微服务设计下阻拦很多的并发量,但是难免访问到redis的并发量还是很多,此时才会出现击穿问题。
击穿:redis曾经拥有,但是后来失去了,KEY的过期导致并发访问数据库
我们知道redis中的数据key是有失效时间的,或者redis本身也是有淘汰机制的,假设redis中的数据key正好失效或者LRU、LFU淘汰机制把key_value淘汰掉了,假设此时正好并发线程去访问这条数据,redis中没有,只能把大量的请求怼到数据库上,这就是redis击穿。
雪崩:击穿比较侧重某一个key失效,当大量的key同时失效,会造成大量的请求怼到数据库,
就会发生雪崩效应。
重点是大量、同时两个词
穿透:redis本就没有,请求直接全部怼到数据库上,奈何数据库也没有,
导致数据库长时间做无效的连接查询造成损耗。
所以击穿和穿透的区别就出来了:
击穿:redis中有需要的数据但是过期或者被淘汰了,导致直接全部访问数据库;
穿透:redis中没有需要的数据