缓存相关问题

缓存穿透

原因

查到DB和缓存都没有的数据

带来的问题

大量DB和缓存都不存在的数据请求打到数据库,会加大数据库压力,严重发生宕机。

解决

缓存空值

如果数据库不存在则在缓存中加入key与null的关系,后续由缓存将null返回给用户

BloomFilter

Bloom Filter是一个很长的二进制向量和一系列随机映射函数,它可以判断数据是否存在。当前场景我们可以用它来判断查询的数据是否在集合中。

bloomfilter

如上图,在缓存上增加一层BloomFilter,进行筛选,不存在直接返回null

缓存击穿

原因

大量的请求到缓存没有的数据(DB有)

带来的问题

加大数据库压力,严重发生宕机

解决

加上锁,第一个取完后放入缓存,后面的去缓存取数据

缓存雪崩

原因

缓存服务崩溃

带来的问题

加大数据库压力,严重发生宕机

解决

  1. 增加高可用(事后)
  2. 本地缓存
  3. 限流
  4. 服务降级(返回默认值)
-------------本文结束,感谢您的阅读-------------