阅读文本大概需要3分钟。
2019磕磕碰碰总算过去了,2020年秉承开源共享原则,继续分享在工作中遇到的各种问题和干货。2020年在面试题开始,祝愿小伙伴在2020年都能谋到一份好差事。
0x01:缓存穿透
在高并发情况下,查询一个数据库和缓存都不存在的值时;如果缓存服务不对这个不存在的值进行缓存,导致缓存不会被命中,而大量请求直接落到数据库上。这种情况就叫缓存击穿。这种情况就是缓存和数据库都没有响应的值。
解决方案:
0x02:缓存击穿
在高并发情况下,对一个特定的值进行查询,但是这个时候缓存正好过期了,缓存没有命中,而导致大量请求直接访问数据库,如活动系统里面查询活动信息。这种情况就是缓存没有对应的值,数据库有对应的值。
解决方案:
0x03:缓存雪崩
在高并发情况下,大量的缓存key在同一时间一起失效,导致大量的请求在缓存中获取不到数据,而直接访问数据库。
解决方案:
一句话缓存穿透、缓存击穿和缓存雪崩都是缓存失效导致大量请求直接访问数据库而出现的情况。不同的是缓存穿透是数据库和缓存都不存在相关数据;而缓存击穿和缓存雪崩是缓存和数据库都存在相应数据,只是缓存失效了而已。