Redis缓存穿透,缓存击穿和雪崩
缓存穿透缓存穿透是指查询一个不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存。这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。
穿透解决方案
布隆过滤器 布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先校验,不符合则丢弃,从而避免对底层查询系统的压力
缓存空对象 在存储不命中后,即便返回的空对象也将其缓存起来,同时设置一个过期时间,之后访问这个数据会从缓存中获取,保护后端数据源 但是这种方法存在两个问题:
如果空值能够被缓存,意味着缓存需要更多的空间存储更多的键,因为其中可能有很多空值的键
即便对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间的不一致,对于保持一致性的业务可能有影响
缓存击穿对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。这个时候,需要考虑一个问题:缓存被“击穿”的问题,这个和缓存雪崩的区别在于这里针对某一key缓存,后者则是很多key。
缓存在某个时间点过期的时候,恰好在这个时间间隔对这个Ke ...