前提思考:
大家了解缓存雪崩、击穿、穿透的基本概念,但是很多人没有接触过实际的场景!
先说说缓存雪崩、击穿、穿透的概念:
-
缓存雪崩:是指在某个时间段内,缓存中的大部分数据同时过期失效,导致大量请求都落在数据库上,导致数据库压力骤增,甚至崩溃。
-
缓存击穿:是指一个缓存失效的key,恰好在这个时间点对应的请求量很大,导致大量请求直接访问数据库,压垮了数据库。
-
缓存穿透:是指查询一个不存在的数据,由于缓存没有命中,因此就会查询数据库,如果黑客利用不存在的key进行攻击,就可能导致缓存穿透。
这三个问题都是在高并发场景下出现的:
以下是一些实际项目中出现的场景:
-
缓存雪崩:某电商平台的商品详情页使用了分布式缓存。由于该商品的访问量非常高,当缓存层的某一台机器挂掉时,会导致所有请求都落到另一台机器上,造成该机器的负载突然变得非常高,最终导致整个缓存层不可用,引发缓存雪崩。
-
缓存击穿:某社交平台的用户信息接口,由于用户数量非常庞大,采用了缓存技术。但是,在某个时间点,有很多用户同时访问了一个不存在的用户ID,导致缓存中没有该用户ID对应的数据,所有请求都落到数据库层,造成了数据库的压力骤增,引发缓存击穿。
-
缓存穿透:某在线教育平台的课程