面试二十九、缓存雪崩、击穿、穿透、一致性
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) 编辑 收藏 举报