0
点赞
收藏
分享

微信扫一扫

缓存击穿、缓存雪崩、缓存穿透

1、缓存击穿(Cache Miss) 缓存击穿指的是在高并发情况下,当一个非常热门的数据(通常是数据库查询结果)在缓存中不存在,而且同时有多个请求同时访问该数据时,这些请求会绕过缓存直接访问后端数据库。这导致数据库负载急剧增加,可能引发性能问题甚至宕机。

缓解缓存击穿的方法是在数据访问时使用互斥锁(Mutex Lock)或分布式锁(Distributed Lock),只允许一个线程或进程去加载数据到缓存中,其他请求等待该数据加载完成。

2、缓存雪崩(Cache Avalanche) 缓存雪崩是指在某个时间点,缓存中的大量数据同时失效或过期,导致大量请求直接访问后端数据库,给数据库带来巨大压力,可能引发性能问题甚至宕机。通常是由于缓存中的数据设置了相同的过期时间,或者缓存系统故障导致。

为了缓解缓存雪崩的影响,可以采取以下措施:

设置不同的缓存过期时间,避免同时失效。 引入缓存预热机制,提前加载热门数据到缓存中。 使用多级缓存架构,如热点数据使用本地缓存,其他数据使用分布式缓存。

3、缓存穿透(Cache Penetration) 缓存穿透是指恶意或异常的请求访问一个不存在于缓存中和数据库中的数据。例如,一个查询不存在用户信息的请求,每次都会绕过缓存直接查询数据库,这样的请求会给数据库带来很大负担。

为了解决缓存穿透问题,可以采取以下方法:

对于查询不存在的数据,可以在缓存中设置一个空值或特殊标记,以避免重复查询数据库。 进行请求参数合法性校验,过滤掉异常请求。 使用布隆过滤器(Bloom Filter)等技术,判断请求的数据是否存在于数据库中,避免直接访问数据库。 需要注意的是,以上三个问题都与缓存的失效机制有关。合理设置缓存过期策略、使用互斥锁、合理设计缓存架构等都是缓解这些问题的关键。

举报

相关推荐

0 条评论