当使用 SpringBoot 结合 Redis 缓存时,我们需要考虑如何防止 Redis 缓存穿透。虽然缓存可以显著提高应用程序的性能,但如果缓存穿透发生,就可能导致数据不一致和性能下降。本文将介绍如何在 SpringBoot 中使用布隆过滤器预防 Redis 缓存穿透问题,并演示代码。
一、Redis三大经典问题
缓存击穿
缓存穿透说简单点就是大量请求的 key 是不合理的,根本不存在于缓存中,也不存在于数据库中 。这就导致这些请求直接到了数据库上,根本没有经过缓存这一层,对数据库造成了巨大的压力,可能直接就被这么多请求弄宕机了。
缓存穿透
缓存击穿中,请求的 key 对应的是 热点数据 ,该数据 存在于数据库中,但不存在于缓存中(通常是因为缓存中的那份数据已经过期) 。这就可能会导致瞬时大量的请求直接打到了数据库上,对数据库造成了巨大的压力,可能直接就被这么多请求弄宕机了。
缓存雪崩
缓存中大量key同时过期,导致请求大部分打到数据库里。
二、解决办法
缓存击穿:
- 缓存无效key
- 布隆过滤器
缓存雪崩:
- 设置不同的失效时间比如随机设置缓存的失效时间。
- 缓存永不失效(不太推荐,实用性太差)。
- 设置二级缓存。
缓存穿透:
- 设置热点数据永不过期或者过期时间比较长。
- 针对热点数据提前预热,将其存入缓存