什么是缓存穿透
缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的, 并且出于容错考虑,如果从存储层查不到数据则不写入缓存, 这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。
如果有人利用这个(些)不存在的key频繁地攻击我们的应用,也会造成雪崩效应。
解决思路
使用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中, 一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
另一个粗暴的方式是将数据库查询到的空值也进行缓存,但缓存过期时间会很短,远低于正常缓存过期时间。