缓存击穿及解决方案

本文介绍了缓存击穿的概念,缓存击穿是指大量请求同时访问一个不在缓存中的数据,导致数据库压力过大。文章详细讨论了缓存击穿的两种场景:数据不存在和数据失效,并提出了相应的解决方案,包括缓存null、Bloomfilter、屏蔽IP、后台刷新、get请求主动更新缓存、分级缓存和加锁等策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓存击穿及解决方案

最近小生遇到了好多人问缓存击穿的问题,作为一个乐于学习的渣渣,小生当然要去网上大肆搜集一番,综合小生的经验整理出了本篇文章,希望可以帮助到大家。

要想研究缓存击穿就得先知道什么是缓存?所谓缓存是Web应用开发同时也是互联网分层架构中非常重要的一个部分,通常用来缓解数据库的压力,从而提升系统整体性能,缩短用户的访问时间。

Web应用获取数据时先会去cache中找数据

  • cache中有数据
  • cache将数据返回给web应用
  • cache中没有数据
  • cache向数据库请求数据
  • 数据库返回数据给cache
  • cache将数据更新后返回给web应用

定义

所谓缓存击穿就是web应用去请求一个不在cache中或者已经失效的数据时,就会触发一次数据库查询,如果瞬间有大量类似的操作时就会导致数据库压力过大,造成反应过慢甚至宕机瘫痪。

解决方法

综上所述产生缓存击穿的场景主要两种

  • 同一时间访问一个或者多个不存在的数据
  • 多个数据同时失效

场景一:数据不存在

方案一:
缓存null:当通过某个key去查询时,如果cache和数据库都不存在对应的数据,那么cache可以将这个key对应的value设置为一个默认值(比如:null),并且设置一个缓存过期的时间,这样在缓存失效这段时间内,所有访问这个key的请求都会被cache拦截,等到缓存失效后再去数据库中查询。

缺点:如果不存在的数据非常多,则会存储大量的缓存垃圾,浪费资源。

方案二:
Bloomfilter:类似于一种哈希表算法,在cache之前预判这个key是否合法,如果不合法则直接返回。

缺点:存在误杀的可能性

方案三:
屏蔽IP:记录并分析访问不存在的数据请求,获取其IP地址,如果在规定时间内此IP超过某个设定值&#

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值