热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Redis缓存异常

一.Redis和数据库中的数据不一致的情况是如何发生的?首先我们需要明确数据一致性的情况缓存中有数据,但是缓存的数据值需要和数据库中的值相同缓存中本身没有数据&#

一.Redis 和数据库中的数据不一致的情况是如何发生的?

首先我们需要明确数据一致性的情况

  • 缓存中有数据,但是缓存的数据值需要和数据库中的值相同
  • 缓存中本身没有数据,那么,数据库中的数据就必须是最新值

如果不符合上述情况,那么就出现了数据不一致的情况。

我们可以根据缓存是不是需要处理写请求,我们可以把缓存分为读写缓存和只读缓存

对于读写缓存来说,如果要进行增删改查需要对于缓存中进行,同时还要通过写回方式,同步回数据库中。

对于只读缓存来说,如果有新的数据新增,会直接去写入到数据库之中,而如果有数据删改的话,只需要把只读缓存中的数据标记为无效。这样,应用后续再访问这些增删改查的数据,就会发生缓存缺失,应用再从数据库中把数据读入缓存之中。

对于缓存来说,我们去对数据进行增删,可能会导致数据不一致问题。

在这里插入图片描述
二.如何解决数据不一致问题

重试机制

我们可以通过把要新增/修改的值暂时存放在消息队列中,如果应用没有能够成功删除缓存之或者更新数据库的时候,我们可以从消息队列中重新读取这个值,然后再次进行删除/更新。如果成功更新,那么我们从消息队列中删除。

如果在一定的次数重试之后还是没有成功,我们可以向业务层进行报错。

删除缓存值或更新数据库失败而导致数据不一致,你可以使用重试机制确保删除或更新操作成功。

三.缓存雪崩,缓存击穿和缓存穿透

缓存雪崩是指大量的应用请求无法在Redis 缓存中进行处理,大量请求到达数据库层,导致数据库的压力激增。

第一个原因 : 缓存中大量键过期,导致大量请求没有办法得到处理。

解决办法 : 我们可以通过微调过期时间,对于数据的过期时间增加一个较小的随机数,避免大量数据同时过期。

第二个原因: Redis实例突然发生故障,无法处理请求,进而发生缓存雪崩。

解决办法:

我们可以去实现服务熔断或者请求限流机制。

服务熔断,在发生缓存雪崩的时候,我们暂停业务服务对于缓存接口的访问。
请求限流,我们在业务系统的请求入口前端控制每秒进入系统的请求数,避免过多的请求被发送到数据库中。

缓存击穿 : 针对于某个访问非常频繁的热点请求,无法在缓存中处理,访问该数据的大量请求,都直接发送到DB上。

解决办法: 对于访问频繁的热点数据,我们不设置过期时间。

缓存穿透: 数据不在Redis中,也不在数据库中,导致请求在访问缓存的时候,发生缓存缺失,再去访问数据库的时候,数据库中也没有要访问的数据。

解决办法 : 设置布隆过滤器来解决这个问题。


推荐阅读
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文探讨了哪些数据库支持队列式的写入操作(即一个键对应一个队列,数据可以连续入队),并且具备良好的持久化特性。这类需求通常出现在需要高效处理和存储大量有序数据的场景中。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
author-avatar
longfeiPHP
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有