网上有一些关于缓存穿透和缓存雪崩的解决方案,无非是:
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
相关推荐
### 缓存穿透及其解决方案 #### 缓存穿透定义 缓存穿透是指客户端请求的数据既不在缓存中也不在数据库中。这种情况会导致每次请求都需要穿透到数据库层,使得数据库承担额外的查询负担,可能导致数据库服务崩溃。 ...
- **缓存穿透**:恶意请求可能导致大量无效请求直接穿透缓存到数据库,可使用布隆过滤器过滤无效请求。 - **缓存雪崩**:大量缓存同时失效,导致请求涌向数据库,可能引发连锁效应。可通过设置随机过期时间或使用...
本案例实战主要探讨如何解决在高并发场景下,采用多级缓存架构实现数据一致性的问题。在这个主题中,我们将深入理解多级缓存的概念、作用以及一致性策略。 首先,我们来解释一下什么是多级缓存。多级缓存是指在应用...
解决方案包括布隆过滤器,它可以大概率判断数据是否存在于数据库中,减少无效查询。 6. **缓存雪崩**: 大量缓存同时失效,导致所有请求直接击穿到数据库,可能导致数据库崩溃。预防措施包括设置合理的缓存过期...
以Ehcache为例,它是Hibernate常用的一种二级缓存解决方案,提供了内存和磁盘两层缓存,支持自动过期策略,确保数据的实时性。 配置二级缓存主要包括以下几个步骤: 1. 引入依赖:在项目的pom.xml或build.gradle...
8. **缓存的挑战与解决方案**: - 数据一致性:采用CAP理论,根据业务场景选择AP或CP模式,如使用分布式锁保证强一致。 - 容量限制:根据业务需求和资源状况,合理设置缓存大小,避免溢出。 - 缓存雪崩:多个缓存...
7. 缓存穿透、缓存雪崩及缓存击穿问题及其解决方案: - 缓存穿透:当请求的数据既不在缓存中也不在数据库中,导致数据库被大量请求穿透。可以通过布隆过滤器预防无效请求。 - 缓存雪崩:大量缓存同时过期,导致...
- **Ehcache**:一个广泛使用的开源Java缓存库,支持内存和磁盘存储,提供了线程安全和分布式缓存解决方案。Ehcache 3.x版本引入了更现代的API,支持Java 8特性。 - **Redis**:一种高性能的键值对存储数据库,常...
OpenResty 可以使用lua-resty-lock模块来解决并发写入导致的缓存数据不一致问题,或者采用缓存穿透、缓存雪崩等解决方案。 5. **缓存预加载**:在系统启动时或数据更新后,预加载缓存可以减少用户首次访问时的等待...
Redis以其丰富的数据结构、出色的性能以及灵活的数据持久化策略,在诸多缓存解决方案中脱颖而出。 Redis作为一个开源的内存数据结构存储系统,它能够存储键(keys)和多种不同类型的值(strings, hashes, lists, ...
- **开源框架缓存**:如Hibernate的一级缓存和二级缓存,Ehcache等,提供开箱即用的缓存解决方案。 - **Hibernate一级缓存**:Session级别,存储实体对象,事务范围内有效,用于同一事务内的数据共享。 - **...
5. **缓存穿透与雪崩问题**:设计合理的防穿透机制(如布隆过滤器)避免无效请求穿透缓存直接到数据库,同时防止缓存失效时大量请求同时落库导致的雪崩现象。 6. **资源配额与限流**:为每个用户或应用设定资源使用...
"电商项目--高并发秒杀优化-miaosha.zip"这个压缩包文件,很显然,是针对这类场景提供的一套解决方案或代码示例,命名为"miaosha-master",暗示着它可能是一个关于秒杀系统优化的开源项目。下面,我们将深入探讨在...
然而,引入缓存会增加系统的复杂性,需要解决一致性、缓存击穿、缓存穿透和缓存雪崩等问题。对于缓存预热,中小公司通常不考虑,但在大型系统中是必要的。 **第三阶段:读写分离** 如果缓存无法满足需求,可以实施...
解决方案是在缓存中设置一个空对象,并设置过期时间,避免频繁访问数据库。 - **缓存击穿**:指大量并发请求同时访问同一个缓存key时,该key恰好失效,导致大量请求直接落到数据库上。解决方法是使用互斥锁或双检查...
常用的缓存一致性策略包括读写分离、缓存穿透、缓存雪崩等,通过这些策略可以有效避免缓存与后端数据的不一致问题。 - **缓存命中率** 提高缓存命中率是优化系统性能的关键因素之一,可以通过精细化缓存策略、...
Oracle Coherence是Oracle中间件中的分布式缓存解决方案,优化缓存策略能显著提高数据访问速度: 1. 选择合适的缓存模式:如穿透式缓存、本地缓存或混合模式。 2. 设定缓存过期策略:根据数据更新频率和业务需求...
7. **缓存技术**:了解并能运用Redis、Memcached等缓存系统,理解缓存穿透、缓存雪崩、缓存击穿等问题及其解决方案。 8. **消息队列**:理解消息队列的作用,如RabbitMQ、Kafka、ActiveMQ等,熟悉其工作原理和使用...
- 使用缓存穿透、缓存雪崩等策略。 - 实现缓存更新机制,如TTL、LRU算法。 #### 六、大型电商系统开放生态的搭建及技术演进 **开放网关关键技术分析** - 服务隔离、业务线程池、Nginx+Lua等技术。 - 快速失败机制...
- **防止缓存穿透**:对于不存在的数据设置空值缓存。 - **缓存失效管理**:避免大量缓存同时失效导致系统压力剧增。 - **缓存监控**:定期分析缓存使用情况,及时调整策略。 - **异步处理**: - 将耗时较长的...