概念:缓存穿透是一个从字面意思上来讲是比较好理解的概念,在平常 Redis 的使用的时候,我们通常会设置 key 和 value,如果访问的请求命中了 key,那就会获取缓存中的 value,当然这在访问量不大的情况下其实没什么大问题。但问题就在于如果有大量的请求访问了这个 key,但是缓存中又没有,此时这些请求就会都去请求数据库,数据库的压力就上来了。
概要:大量请求去查询一个不存在的 key,直接穿过缓存去访问数据库。
原因:
解决方式:布隆过滤器
概念:缓存击穿是某一个时间段内有大量的请求去访问某一个 key,但是这个 key 突然失效了,这时候这些访问因为访问不到这个 key 而去直接请求数据库的情况。
概要:大量请求去查询一个 key 的时候,这个 key 正好过期,这些请求直接穿过缓存去访问数据库。
解决方式:
概念:缓存雪崩可以看做是缓存击穿的父集,缓存击穿是大量请求访问一个过期的 key,而缓存雪崩则是大量的请求在访问缓存的时候,这个时候正好突然有大量的 key 过期,此时如果重启 redis,也只会再次崩溃。
概要:大量请求去查询大规模 key 的时候,这些 key 正好过期,这些请求直接穿过缓存去访问数据库,导致数据库崩溃。
解决方式: