1.前言
- 使用缓存并不是一劳永逸的,可能会出现各种问题,简单介绍下使用缓存遇到的常见问题及解决办法。
2.缓存穿透
2.1 定义
-
缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,
-
缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。
2.2 造成缓存穿透的原因
-
业务自身代码或者数据出现问题
-
一些恶意攻击、爬虫等造成大量空命中
2.3 解决方法
-
缓存空对象
-
空值做缓存,即缓存层中存了更多的键,这就需要更多的内存空间 ,可以对其设置一个较短的过期时间,让其自动清除。
-
优点是实时性高,代码维护简单。
-
布隆过滤器拦截
-
如果布隆过滤器认为某个键 不存在,那么就不会访问存储层。
-
适用于数据命中不高,数据相对固定实时性低(通常是数据集较大)的应用场景,代码维护较为复杂,但是缓存空间占用少。