数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩

缓存穿透

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。
数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩_第1张图片
常用解决方案:

  • 缓存空对象

    • 优点:实现简单,维护方便
    • 缺点:
      • 额外的内存消耗:可以设置过期时间
      • 可能造成短期的不一致:可能在空对象没过期的时候数据库中真的插入了该数据
        数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩_第2张图片
  • 布隆过滤:详情可见我的另一个博客:布隆过滤器详解
    数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩_第3张图片

缓存击穿

缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。
数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩_第4张图片

常见的解决方案有两种:互斥锁与逻辑过期
数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩_第5张图片
数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩_第6张图片
数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩_第7张图片

缓存雪崩

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。
数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩_第8张图片

解决方案:

  • 给不同的Key的TTL添加随机值,避免key集中过期
  • 利用Redis集群提高服务的可用性
  • 给缓存业务添加降级限流策略
  • 给业务添加多级缓存

如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔的个人空间

你可能感兴趣的:(数据库,缓存,redis,数据库)