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

Redis缓存穿透、缓存击穿、缓存雪崩以及缓存一致性问题

缓存穿透问题描述:用户不断的进行查询Redis中不存在的数据,并且该数据在数据库中也没有解决办法将查询的key存入Redis中,value为”null“服务端做前置校验与过载保护布



缓存穿透


问题描述:用户不断的进行查询 Redis 中不存在的数据,并且该数据在数据库中也没有


解决办法




  1. 将查询的 key 存入 Redis 中,value 为 ”null“


  2. 服务端做前置校验与过载保护


  3. 布隆过滤器



缓存击穿


问题描述:高并发的系统中,大量的请求同时查询一个 key 时,这个 key 刚好失效


解决办法




  1. 加互斥锁,只让第一个线程去查数据库,其余阻塞


  2. 缓存不过期



缓存雪崩


问题描述




  1. Redis 中的缓存集体失效




  2. 某个缓存服务器节点宕机




解决办法




  1. 缓存失效时间分散开


  2. 集群缓存


  3. 缓存不过期



缓存一致性


方案一


通过 Redis 过期时间更新缓存,数据库更新不会触发 Redis 更新,只有当 key 过期时才会更新


缺点




  1. 长时间数据不一致,产生脏数据


  2. 完全依赖过期时间,时间太短频繁失效,时间太长长时间更新延迟


方案二


更新 MySQL 同时更新 Redis


缺点:更新 MySQL 成功,更新 Redis 失败,就成了方案一


方案三


方案二的基础上,增加消息队列,将 Redis 更新交由 MQ 由消息队列保证可靠性,异步更新 Redis


缺点




  1. 时序问题,多个业务对一条数据进行更新,数据先后顺序可能会乱


  2. 引入 MQ,增加复杂性


方案四


MySQL 更新与 Redis 更新放在一个事务中,达到强一致性


缺点




  1. MySQL 与 Redis 一个出现问题,集体魂滚


  2. 网络超时出现回滚和并发问题


方案五


通过订阅 Binlog 更新 Redis


缺点:单独搭建同步服务,引入 Binlog 同步机制


本文地址:https://blog.csdn.net/u013570834/article/details/107866669



推荐阅读
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文详细介绍了MySQL InnoDB存储引擎中的间隙锁概念及其作用,探讨了它在解决幻读问题方面的关键角色,并解析了间隙锁与其他操作之间的冲突关系。同时,文章还讨论了next-key-lock的构成及应用,以及在不同场景下的优化策略。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 通过与阿里云的合作,牛客网成功解决了跨国视频面试中的网络卡顿问题,为求职者和面试官提供了更加流畅的沟通体验。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
author-avatar
芋荌源
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有