缓存穿透
原因
查到DB和缓存都没有的数据
带来的问题
大量DB和缓存都不存在的数据请求打到数据库,会加大数据库压力,严重发生宕机。
解决
缓存空值
如果数据库不存在则在缓存中加入key与null的关系,后续由缓存将null返回给用户
BloomFilter
Bloom Filter是一个很长的二进制向量和一系列随机映射函数,它可以判断数据是否存在。当前场景我们可以用它来判断查询的数据是否在集合中。

如上图,在缓存上增加一层BloomFilter,进行筛选,不存在直接返回null
缓存击穿
原因
大量的请求到缓存没有的数据(DB有)
带来的问题
加大数据库压力,严重发生宕机
解决
加上锁,第一个取完后放入缓存,后面的去缓存取数据
缓存雪崩
原因
缓存服务崩溃
带来的问题
加大数据库压力,严重发生宕机
解决
- 增加高可用(事后)
- 本地缓存
- 限流
- 服务降级(返回默认值)