`

业务层面缓存穿透的解决方案

 
阅读更多

网上有一些关于缓存穿透和缓存雪崩的解决方案,无非是:

      1.如果查询数据为null,则把null进行缓存

      2.使用布隆过滤器

 

先来说说缓存穿透的概念:我们在项目中使用缓存通常都是APP先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。这个时候如果我们查询的某一个数据在缓存中一直不存在,就会造成每一次请求都查询DB,这样缓存就失去了意义,在流量大时,可能DB就挂掉了。

 

再来讲讲我们的业务场景:

      1.通常我们是首页,或是统计页,用户请求较多,首页进入系统必定会加载,统计页(针对一些准实时的统计结果)查询的SQL或是结果比较复杂。

      2.时效性一般,基本上小时级别

      3.数据量较大,一般是亿级或是千万级别

      4.业务逻辑比较复杂,可能需要进行各种表的关联

      5.如果请求过多,有可能数据库奔溃,即使在进行分库分表之后还是有可能占用一大部分的数据库IO和CPU资源

      6.统计的维度较多,每个用户请求的维度可能是不一样的。

      针对上述情况我们一般的做法,就是加一层缓存,请求过来先去访问缓存,可以使用memcached或是redis,如果缓存不存在或是缓存失效的情况下,再去load DB。大部分的情况下,这是非常好的,但是某一天如果你需要重启缓存,或是缓存在某一时刻失效很大一部分,这就会导致我们之前所说的缓存穿透。

     ok,来说下我们在缓存穿透的优化吧:先来看个架构图,在来解释

      

 

    1.更具业务统计的维度或是场景,建立一张以JSON格式为模板的表

    2.通过调度平台,定时的把任务统计完成并保存至模板表中和缓存集群中

    3.不断对2进行轮询,保持数据的热度

    4.用户请求过来,先访问我们的缓存,一旦缓存失效或是重启,直接从数据库模板表中获取最新的热度数据并缓存,这样我们就能有效的减轻数据库的压力。

    5.这也是一种缓存预热的方案

 技术交流:534368042

分享到:
评论

相关推荐

    Redis中缓存雪崩、缓存穿透等问题的解决方案.docx

    ### 缓存穿透及其解决方案 #### 缓存穿透定义 缓存穿透是指客户端请求的数据既不在缓存中也不在数据库中。这种情况会导致每次请求都需要穿透到数据库层,使得数据库承担额外的查询负担,可能导致数据库服务崩溃。 ...

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

    - **缓存穿透**:恶意请求可能导致大量无效请求直接穿透缓存到数据库,可使用布隆过滤器过滤无效请求。 - **缓存雪崩**:大量缓存同时失效,导致请求涌向数据库,可能引发连锁效应。可通过设置随机过期时间或使用...

    案例实战-高并发业务的多级缓存架构一致性解决方案

    本案例实战主要探讨如何解决在高并发场景下,采用多级缓存架构实现数据一致性的问题。在这个主题中,我们将深入理解多级缓存的概念、作用以及一致性策略。 首先,我们来解释一下什么是多级缓存。多级缓存是指在应用...

    处理缓存基本知识

    解决方案包括布隆过滤器,它可以大概率判断数据是否存在于数据库中,减少无效查询。 6. **缓存雪崩**: 大量缓存同时失效,导致所有请求直接击穿到数据库,可能导致数据库崩溃。预防措施包括设置合理的缓存过期...

    hibernate二级缓存实例

    以Ehcache为例,它是Hibernate常用的一种二级缓存解决方案,提供了内存和磁盘两层缓存,支持自动过期策略,确保数据的实时性。 配置二级缓存主要包括以下几个步骤: 1. 引入依赖:在项目的pom.xml或build.gradle...

    缓存练习2

    8. **缓存的挑战与解决方案**: - 数据一致性:采用CAP理论,根据业务场景选择AP或CP模式,如使用分布式锁保证强一致。 - 容量限制:根据业务需求和资源状况,合理设置缓存大小,避免溢出。 - 缓存雪崩:多个缓存...

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

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

    java缓存数据

    - **Ehcache**:一个广泛使用的开源Java缓存库,支持内存和磁盘存储,提供了线程安全和分布式缓存解决方案。Ehcache 3.x版本引入了更现代的API,支持Java 8特性。 - **Redis**:一种高性能的键值对存储数据库,常...

    Openresty 缓存策略.zip

    OpenResty 可以使用lua-resty-lock模块来解决并发写入导致的缓存数据不一致问题,或者采用缓存穿透、缓存雪崩等解决方案。 5. **缓存预加载**:在系统启动时或数据更新后,预加载缓存可以减少用户首次访问时的等待...

    缓存框架互联网常用的使用框架

    Redis以其丰富的数据结构、出色的性能以及灵活的数据持久化策略,在诸多缓存解决方案中脱颖而出。 Redis作为一个开源的内存数据结构存储系统,它能够存储键(keys)和多种不同类型的值(strings, hashes, lists, ...

    j2EE 缓存 Web前端优化 后台 服务器优化

    - **开源框架缓存**:如Hibernate的一级缓存和二级缓存,Ehcache等,提供开箱即用的缓存解决方案。 - **Hibernate一级缓存**:Session级别,存储实体对象,事务范围内有效,用于同一事务内的数据共享。 - **...

    开放平台资源控制缓存体系的优化.zip

    5. **缓存穿透与雪崩问题**:设计合理的防穿透机制(如布隆过滤器)避免无效请求穿透缓存直接到数据库,同时防止缓存失效时大量请求同时落库导致的雪崩现象。 6. **资源配额与限流**:为每个用户或应用设定资源使用...

    电商项目--高并发秒杀优化-miaosha.zip

    "电商项目--高并发秒杀优化-miaosha.zip"这个压缩包文件,很显然,是针对这类场景提供的一套解决方案或代码示例,命名为"miaosha-master",暗示着它可能是一个关于秒杀系统优化的开源项目。下面,我们将深入探讨在...

    数据库优化方案1

    然而,引入缓存会增加系统的复杂性,需要解决一致性、缓存击穿、缓存穿透和缓存雪崩等问题。对于缓存预热,中小公司通常不考虑,但在大型系统中是必要的。 **第三阶段:读写分离** 如果缓存无法满足需求,可以实施...

    企业微服务架构设计及实施的六大难点剖析-最佳实践.docx

    解决方案是在缓存中设置一个空对象,并设置过期时间,避免频繁访问数据库。 - **缓存击穿**:指大量并发请求同时访问同一个缓存key时,该key恰好失效,导致大量请求直接落到数据库上。解决方法是使用互斥锁或双检查...

    高可用分布式架构设计与实践-内训方案.pdf

    常用的缓存一致性策略包括读写分离、缓存穿透、缓存雪崩等,通过这些策略可以有效避免缓存与后端数据的不一致问题。 - **缓存命中率** 提高缓存命中率是优化系统性能的关键因素之一,可以通过精细化缓存策略、...

    Oracle中间件优化讲义

    Oracle Coherence是Oracle中间件中的分布式缓存解决方案,优化缓存策略能显著提高数据访问速度: 1. 选择合适的缓存模式:如穿透式缓存、本地缓存或混合模式。 2. 设定缓存过期策略:根据数据更新频率和业务需求...

    JAVA架构师课程+面试资料 2.zip

    7. **缓存技术**:了解并能运用Redis、Memcached等缓存系统,理解缓存穿透、缓存雪崩、缓存击穿等问题及其解决方案。 8. **消息队列**:理解消息队列的作用,如RabbitMQ、Kafka、ActiveMQ等,熟悉其工作原理和使用...

    从大型电商架构演进看互联网高可用架构设计——内训方案.pdf

    - 使用缓存穿透、缓存雪崩等策略。 - 实现缓存更新机制,如TTL、LRU算法。 #### 六、大型电商系统开放生态的搭建及技术演进 **开放网关关键技术分析** - 服务隔离、业务线程池、Nginx+Lua等技术。 - 快速失败机制...

    《软件性能测试、分析与调优实践之路-第二版》ppt 课件总结

    - **防止缓存穿透**:对于不存在的数据设置空值缓存。 - **缓存失效管理**:避免大量缓存同时失效导致系统压力剧增。 - **缓存监控**:定期分析缓存使用情况,及时调整策略。 - **异步处理**: - 将耗时较长的...

Global site tag (gtag.js) - Google Analytics