面试二十九、缓存雪崩、击穿、穿透、一致性

1、缓存雪崩:大量key同时超时失效,导致大量请求进入数据库

  解决方案:

    1)可以对失效时间设置随机值

    2)熔断机制,当真的出现雪崩时请求达到一定的量就返回系统繁忙

2、缓存击穿:热点key失效,导致大量请求进入数据库

  解决方案:

    1)分析业务是否可将超时时间设为永久

    2)缓存失效时,通过互斥锁防止大量请求进入

3、缓存穿透:缓存中不存在的key,导致大量请求进入数据库

  解决方案:

    1)布隆过滤器,没有实际用过。

    2)接口层增加校验,非法数据不让进入。

4、缓存一致性

  1)先删除缓存,再更新数据库

    存在问题:

      请求1将缓存删除;

      请求2发现缓存不存在,查数据库旧值放入缓存;

      请求1更新数据库;

      缓存里数据就是脏数据了

    解决方案:

      设置超时时间,在这期间内允许脏数据的出现

      延时双删,如上在请求1更新数据库后延时1秒(时间具体多少按业务来确定),再次删除缓存

  2)先更新数据库,在删除缓存

    存在问题:

      缓存刚好失效,请求1发现缓存不存在

      请求2更新数据库,删除缓存

      请求1查询数据库,查到旧值放入缓存

      缓存里数据就是脏数据

    解决方案:

      设置超时时间

    出现上述问题一个关键点在于请求2的写数据库操作比请求1的读操作慢,

    但是实际操作中一般读肯定比写来的快。

      

      

posted on 2021-09-05 21:31  Iversonstear  阅读(41)  评论(0编辑  收藏  举报

导航