缓存击穿详解(定义原因及解决方法)

缓存击穿详解(定义原因及解决方法)-mikechen

什么是缓存击穿

缓存击穿:是指同一时间内大量缓存同时失效,导致请求全部转向数据库,导致数据库负载急剧增加。

 

缓存击穿的原因

一个key非常热点,大量访问集中对这一个点进行访问,在不停的扛着大并发。

当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就会出现缓存击穿的场景。

如下图所示:

缓存击穿详解(定义原因及解决方法)-mikechen

于是多个请求同时绕过缓存,直接访问数据库来获取所需数据。

底层数据源负载骤增,可能导致数据库连接池资源耗尽、数据库性能下降,甚至数据库宕机。

因为大量请求同时绕过缓存,直接访问数据库,这会导致数据库的性能下降,响应时间延长,从而降低了整个系统的性能。

因此,缓存击穿是需要认真对待的缓存问题,它可能对系统的性能、可用性和用户体验产生严重影响。

 

缓存击穿解决方案

为了解决或缓解缓存击穿问题,通常需要采取适当的缓存策略和技术措施,例如:缓存预热、互斥锁、缓存数据的时效性等。

1.缓存预热

在系统启动或低峰期,可以通过后台任务将一些热门数据加载到缓存中,以避免在高峰期发生击穿。

2.互斥锁

可以使用互斥锁来保护对底层数据源的并发访问,只允许一个请求去查询底层数据,其他请求等待查询结果。

这种方法会减少对数据库的并发访问,但可能会增加请求的等待时间。

3.缓存数据的时效性

设置缓存中数据的过期时间,确保即使数据过期,仍有一定时间内不会击穿缓存。

4.使用分布式锁

在分布式环境中,可以使用分布式锁来控制对底层数据的并发访问,以避免缓存击穿。

5.穿透数据写入缓存

当请求查询某个数据并且发现数据不存在时,可以将这个“空”结果也写入缓存,但设置一个较短的缓存时间,以避免重复查询。

缓存击穿是一个常见的性能问题,对系统的影响可以是灾难性的。

因此,合理的缓存设计和缓存管理策略是关键,以确保高并发访问时仍能提供稳定的性能和可用性。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法