什么是缓存击穿
缓存击穿:是指同一时间内大量缓存同时失效,导致请求全部转向数据库,导致数据库负载急剧增加。
缓存击穿的原因
一个key非常热点,大量访问集中对这一个点进行访问,在不停的扛着大并发。
当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就会出现缓存击穿的场景。
如下图所示:
于是多个请求同时绕过缓存,直接访问数据库来获取所需数据。
底层数据源负载骤增,可能导致数据库连接池资源耗尽、数据库性能下降,甚至数据库宕机。
因为大量请求同时绕过缓存,直接访问数据库,这会导致数据库的性能下降,响应时间延长,从而降低了整个系统的性能。
因此,缓存击穿是需要认真对待的缓存问题,它可能对系统的性能、可用性和用户体验产生严重影响。
缓存击穿解决方案
为了解决或缓解缓存击穿问题,通常需要采取适当的缓存策略和技术措施,例如:缓存预热、互斥锁、缓存数据的时效性等。
1.缓存预热
在系统启动或低峰期,可以通过后台任务将一些热门数据加载到缓存中,以避免在高峰期发生击穿。
2.互斥锁
可以使用互斥锁来保护对底层数据源的并发访问,只允许一个请求去查询底层数据,其他请求等待查询结果。
这种方法会减少对数据库的并发访问,但可能会增加请求的等待时间。
3.缓存数据的时效性
设置缓存中数据的过期时间,确保即使数据过期,仍有一定时间内不会击穿缓存。
4.使用分布式锁
在分布式环境中,可以使用分布式锁来控制对底层数据的并发访问,以避免缓存击穿。
5.穿透数据写入缓存
当请求查询某个数据并且发现数据不存在时,可以将这个“空”结果也写入缓存,但设置一个较短的缓存时间,以避免重复查询。
缓存击穿是一个常见的性能问题,对系统的影响可以是灾难性的。
因此,合理的缓存设计和缓存管理策略是关键,以确保高并发访问时仍能提供稳定的性能和可用性。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

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