软件体系结构 - 缓存技术(9)缓存穿透

简介: 【4月更文挑战第20天】软件体系结构 - 缓存技术(9)缓存穿透

缓存穿透是指在高并发场景下,客户端请求的某个数据在缓存中不存在,且在后端数据库中也不存在。由于缓存通常在未命中时才去数据库查询,对于这类请求,缓存无法起到拦截作用,导致大量请求直接打到数据库,形成“穿透”现象。这种现象会给数据库带来不必要的压力,尤其是当请求的键是恶意构造或大量不存在的键时,可能会对数据库造成严重的冲击。

缓存穿透的原因主要有:

  1. 正常查询不存在的数据:在实际业务中,用户或应用程序可能会请求一些确实不存在于数据库中的数据。如果这些请求量较大,且没有适当的缓存处理机制,就会导致缓存穿透。
  2. 恶意攻击:攻击者故意制造大量不存在的查询请求,企图使缓存失效并直接冲击数据库,这种攻击通常被称为“缓存击穿攻击”。

缓存穿透的危害包括:

  • 数据库压力剧增:大量无效请求直接到达数据库,可能使数据库成为性能瓶颈,影响其对其他合法请求的响应能力。
  • 系统响应延迟:数据库处理大量无效请求导致响应时间延长,影响整体系统的响应速度和用户体验。
  • 资源浪费:数据库资源被无效请求占用,可能导致真正需要服务的请求无法得到及时处理,浪费系统资源。

为防止和缓解缓存穿透,可以采用以下策略:

策略一:缓存空值

  • 对于查询结果为null或不存在的数据,依然将其以特定标记(如特殊值或空对象)存入缓存,设定较短的过期时间。这样,后续同样的无效请求就可以直接从缓存中获取结果,避免穿透到数据库。

策略二:布隆过滤器

  • 使用布隆过滤器(Bloom Filter)对可能存在的数据进行预判。布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否“可能”存在于一个集合中。在请求到达缓存之前,先通过布隆过滤器检查该键是否可能存在。如果布隆过滤器判断该键不存在,则直接返回,避免对数据库的无效查询。

策略三:白名单/黑名单机制

  • 对于已知的合法请求或恶意请求,建立白名单或黑名单。白名单允许通过的请求直接访问缓存和数据库,黑名单则阻止恶意请求到达数据库。这种方式需要结合业务逻辑和风控系统进行实时更新和维护。

策略四:请求限流与熔断

  • 对于短时间内大量相同或相似请求,使用限流组件限制其访问速率,或者在检测到异常流量时启动熔断机制,暂时拒绝部分请求,保护数据库免受冲击。

策略五:后台预加载或定时刷新

  • 对于特定业务场景,可以提前预加载或定时刷新可能被频繁访问但不存在于缓存和数据库的数据,填充空值缓存,防止穿透。

综上所述,通过合理的缓存策略、防御性编程以及风险控制手段,可以有效防止和缓解缓存穿透现象,保护数据库免受无效请求的冲击,确保系统的稳定性和性能。在实际应用中,往往需要结合业务特性和系统资源状况,综合运用多种策略来应对缓存穿透问题。

相关文章
|
11月前
|
缓存 数据库连接 数据库
缓存三剑客(穿透、击穿、雪崩)
缓存穿透指查询数据库和缓存中都不存在的数据,导致请求直接冲击数据库。解决方案包括缓存空对象和布隆过滤器。缓存击穿是大量请求访问同一个失效的热点数据,使数据库瞬间压力剧增,解决方法有提前预热、设置永不过期、加锁限流等。缓存雪崩是大量key同时失效,导致所有请求直达数据库,可通过引入随机过期时间缓解。三者分别对应单点爆破、全面崩塌等问题,需根据场景选择合适策略优化系统性能与稳定性。
596 0
|
12月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
11月前
|
缓存 数据库
如何解决缓存穿透?
对请求增加校验机制,如ID格式和位数校验,避免无效请求;缓存空值或特殊值防止缓存穿透;使用布隆过滤器拦截不存在的请求,减轻数据库压力。
198 0
|
缓存 监控 NoSQL
Redis--缓存击穿、缓存穿透、缓存雪崩
缓存击穿、缓存穿透和缓存雪崩是Redis使用过程中可能遇到的常见问题。理解这些问题的成因并采取相应的解决措施,可以有效提升系统的稳定性和性能。在实际应用中,应根据具体场景,选择合适的解决方案,并持续监控和优化缓存策略,以应对不断变化的业务需求。
2220 29
|
缓存 数据库
什么是缓存穿透 ? 怎么解决 ?
缓存穿透是指查询一条数据库和缓存都没有的一条数据,就会一直查询数据库,对数据库的访问压力就会增大,缓存穿透的解决方案 有以下2种解决方案 : ● 缓存空对象:代码维护较简单,但是效果不好。 ● 布隆过滤器:代码维护复杂,效果很好
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
862 1