`

缓存击穿问题分析

 
阅读更多
缓存一般作为RDS的前置组件,将常用的资源缓存,用来减少RDS的读取压力,也是诸多系统常用的一种方案,如果允许访问缓存失败直接访问数据库,然后再将数据回写到缓存中,那么就会存在缓存击穿的问题,
缓存击穿:缓存中的数据未被命中,进而请求直接对数据库进行查询,当大量的类似查询瞬间出现,就会出现数据库的压力爆炸甚至引起数据库的雪崩,本质就是一种缓存失效引发的极端问题

如何应对这种情况?
在很多面试过程中碰到这样的问题,给出答案:不给缓存击穿的机会
首先不允许跨过缓存直接访问数据库,在缓存中及认为数据可以被访问,否则则认为访问的数据不存在,
接下来就是RDS和缓存的同步问题,保证数据最终会呈现给用户,但是有延迟,功能的延迟和系统雪崩的风险选择,个人比较倾向于后者,

这种方案将数据的查询完全依赖缓存,一旦缓存挂掉,基本系统也就over了,这就依赖缓存的高可用部署了,采用集群或者多集群的方式,提高系统的可用性,剩下的就是和RDS一样的问题,比如防攻击,数据切片等

另外还有一种方案,加锁的方式,对于同一个key进行枷锁,当key 不命中的时候,需要去数据库中去查询然后回写到缓存中,查询已经回写的操作进行加锁,粗暴一点 可以用synchronized直接加锁,最坏的情况,jvm中,某个key的请求的请求 全部block,另外可以用分布式锁的方案,当发现key不命中时向redis中添加一个lock_key,添加方式使用setnx指令,这样同一个key的请求只有一个成功,设置成功的请求,进行查询回写操作,设置失败的请求,建议直接进行返回,不要等待,比较一个服务器的连接数是有限制的,如果太多请求等待的话 会影响其他的正常业务

分享到:
评论

相关推荐

    如何设计缓存系统:缓存穿透,缓存击穿,缓存雪崩解决方案分析.docx

    缓存系统是当前web应用程序中最常用的性能优化手段之一,但是设计一个好的缓存系统需要考虑许多问题,例如缓存穿透、缓存击穿和缓存雪崩等问题。本文将对这些问题进行分析,并提供相应的解决方案。 缓存穿透 缓存...

    缓存穿透,缓存击穿,缓存雪崩解决方案分析.docx

    缓存穿透、缓存击穿、缓存雪崩解决方案分析 本文主要介绍了缓存系统中三个常见的问题:缓存穿透、缓存击穿和缓存雪崩,并对每个问题提供了多种解决方案。 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于...

    常见的缓存穿透,缓存击穿,缓存雪崩解决方案分析.docx

    ### 常见的缓存穿透、缓存击穿、缓存雪崩解决方案分析 #### 缓存穿透 缓存穿透是指查询一个确定不存在的数据,由于缓存是不命中时被动写入的,并且为了容错,如果从存储层查不到数据,则不会写入缓存。这样一来,...

    使用Golang的singleflight防止缓存击穿的方法

    #### 缓存击穿问题解析 在高并发场景下,缓存系统是提升应用性能的重要手段之一。然而,当某个热门数据项(通常由一个特定的key标识)在缓存中过期时,如果恰好有大量用户同时请求该数据,那么所有的请求将直接穿透...

    Redis使用-缓存穿透,雪崩,击穿以及解决方案分析.docx

    3. 使用双缓存机制,例如使用两个 Redis 实例,一个作为主缓存,一个作为副缓存,当主缓存失效时,使用副缓存作为备用缓存,以避免缓存击穿问题。 4. 使用分布式锁机制,例如使用 ZooKeeper 或 Etcd 等分布式锁,来...

    缓存穿透,击穿,雪崩以及解决方案,干货满满.docx

    缓存是IT系统中常用的加速数据访问的工具,但如果不恰当设计和管理,可能会引发一些严重问题,如缓存穿透、缓存击穿和缓存雪崩。以下是对这三个问题的详细解释及其解决方案。 1. **缓存穿透** 缓存穿透是指请求的...

    缓存一致性问题与解决方案

    **缓存击穿、穿透、雪崩问题**: - **缓存击穿**:大量请求同一已失效的缓存项,直接请求数据库,可能导致数据库压力过大。预防方法包括设置热点数据永不过期或使用分布式锁。 - **缓存穿透**:恶意请求可能导致...

    java缓存技术深入剖析

    - **缓存击穿**:缓存失效时,大量请求同时到达,数据库瞬间压力剧增。 - **缓存雪崩**:多个缓存同时失效,导致请求全部涌向数据库,可能造成系统瘫痪。 五、缓存更新策略 1. **定时更新**:设置固定的过期时间,...

    缓存全面剖析.pdf及安装文件、缓存客户端、源码

    5. **缓存穿透、缓存雪崩和缓存击穿**:这三种常见问题及其解决方案。 6. **缓存的性能优化**:如设置合理的缓存大小、过期策略,以及缓存预热和刷新策略。 接下来,我们有"memcached-1[1].2.1-src.rar"和...

    Java系统分布式缓存PPT

    这可能包括但不限于缓存穿透、缓存雪崩、缓存击穿等问题的解决方案,以及如何利用缓存预热、缓存更新策略(如Write-Behind和Write-Through)来提升系统稳定性。此外,还可能涉及缓存的容量管理和数据淘汰策略,例如...

    大数据时代性能与缓存的优化

    7. 缓存穿透、缓存雪崩及缓存击穿问题及其解决方案: - 缓存穿透:当请求的数据既不在缓存中也不在数据库中,导致数据库被大量请求穿透。可以通过布隆过滤器预防无效请求。 - 缓存雪崩:大量缓存同时过期,导致...

    java map 实现缓存技术

    7. **缓存击穿与缓存雪崩**:处理大量并发请求同时导致缓存失效(击穿)或整个缓存服务崩溃(雪崩)的问题,可以通过加锁、使用分布式锁、预热缓存等方式解决。 8. **监控与统计**:为了优化缓存性能,需要收集和...

    优化增强的缓存机制(SimpleCache).zip

    2. **缓存击穿和缓存雪崩**:这两种情况可能导致服务性能急剧下降,甚至崩溃。缓存击穿是指大量请求同时导致缓存失效,直接访问后端服务;缓存雪崩则是由于大量缓存同时过期,导致服务压力过大。合理的缓存设计应该...

    Redis从入门到精通(四)Redis实战(二)商户查询缓存 测试项目代码

    Redis是世界上最受欢迎的...通过实际的项目代码,你可以更深入地理解如何设计和实施一个高效的Redis缓存解决方案,同时防范缓存击穿等问题。在这个过程中,不仅提升了技术能力,也强化了对分布式系统中缓存管理的理解。

    hibernate 缓存策略

    4. 使用缓存时要注意缓存击穿、缓存雪崩和缓存穿透等问题,采取适当的预防措施。 总的来说,理解并合理运用Hibernate的缓存策略,能够显著提升应用性能,减少数据库的压力,但同时也需要考虑数据一致性及并发控制等...

    java面试题_缓存(10题)

    缓存击穿是指某个热点数据在缓存过期的瞬间,大量请求同时涌入数据库,造成数据库压力骤增。预防措施可以是设置热点数据永不过期,或者采用互斥锁确保同一时刻只有一个请求去更新数据库。 6. **缓存雪崩** 大量...

    java之数据库缓存

    在实践中,合理配置缓存大小、设置合适的过期策略、处理缓存一致性问题(如缓存穿透、缓存雪崩和缓存击穿)等都是挑战。开发者需要根据业务场景进行权衡,以确保缓存能带来性能提升而不是引入新的问题。 总结来说,...

    memcached完全剖析ehcache memcached redis 缓存技术总结

    4. **缓存机制** - 文章可能会讲解缓存的基本原理,如缓存击穿、缓存穿透和缓存雪崩等问题,以及解决策略。 5. **性能对比** - 对比这三种缓存技术在吞吐量、响应时间、内存利用率等方面的性能差异。 6. **使用...

    复习精讲1

    缓存击穿问题是指当某个热点数据的缓存失效时,所有的请求都会直接访问数据库,导致数据库连接异常。 2.4 缓存的并发竞争问题 缓存的并发竞争问题是指多个请求同时访问缓存时,可能会导致缓存数据不一致。 3. 单...

    项目典型数据应用缓存的jvm之旅

    - 缓存击穿:针对热点数据,当同一时刻大量请求到来时,可能导致缓存失效,所有请求直接到数据库。可以使用互斥锁来避免这种情况。 五、监控与诊断工具 1. JConsole:官方提供的JVM监视工具,可以查看内存、线程、...

Global site tag (gtag.js) - Google Analytics