当前位置: 首页 > news >正文

网站开发创业计划书模板宝安中心医院是什么级别

网站开发创业计划书模板,宝安中心医院是什么级别,如何自己设计一个网页,信息流广告的三个特点当 Redis 作为缓存使用时,保证缓存数据与数据库(或其他数据源)之间的一致性是一个核心挑战。通常,我们追求的是“最终一致性”,而不是“强一致性”,因为强一致性往往会牺牲性能和可用性,这与使用…

当 Redis 作为缓存使用时,保证缓存数据与数据库(或其他数据源)之间的一致性是一个核心挑战。通常,我们追求的是“最终一致性”,而不是“强一致性”,因为强一致性往往会牺牲性能和可用性,这与使用缓存的初衷相悖。

以下是几种常见的策略和技术,用于保证或提升数据一致性:

  1. 缓存失效策略 (Cache Invalidation Strategies)

    这是最核心的部分,主要处理数据更新时如何让缓存失效或更新。

    • 先更新数据库,再删除缓存 (Cache Aside Pattern - Write Invalidate)

      • 写操作
        1. 更新数据库中的数据。
        2. 删除 Redis 缓存中对应的数据。
      • 读操作
        1. 先从 Redis 读取数据。
        2. 如果缓存命中,直接返回。
        3. 如果缓存未命中,从数据库读取数据。
        4. 将从数据库读取的数据写入 Redis 缓存(通常设置过期时间)。
        5. 返回数据。
      • 优点:操作简单,能保证下次读取时能从数据库获取最新数据并回填缓存。
      • 潜在问题及解决方案
        • 问题1:删除缓存失败。数据库更新成功,但删除缓存失败,导致缓存中是旧数据。
          • 解决方案
            • 重试机制:引入消息队列(如 Kafka, RabbitMQ)或重试框架,确保删除操作最终成功。
            • 订阅数据库变更日志 (CDC - Change Data Capture):如使用 Canal (MySQL)、Debezium 等工具监听数据库的 binlog,当数据发生变更时,由这些工具异步通知缓存进行删除或更新。这是更可靠的方式。
        • 问题2:并发写读导致不一致。线程A更新数据库,线程B在A删除缓存前读取了旧缓存;或者线程A更新数据库,删除缓存后,线程B读取数据库并回填缓存,此时线程C(一个较早的写请求)删除了缓存(由于网络延迟等原因,删除命令后到达)。
          • 解决方案
            • 设置较短的缓存过期时间 (TTL):即使出现不一致,也会在短时间内自动纠正。这是最简单且常用的保底方案。
            • 延时双删
              1. 更新数据库。
              2. 删除缓存。
              3. sleep 一小段时间 (e.g., 几百毫秒)。
              4. 再次删除缓存。
                这种方式是为了防止在步骤2之后,其他读请求将旧数据写入缓存。但 sleep 时间不好确定,且影响性能。
            • 分布式锁:在写操作和缓存回填操作时加锁,但会显著影响并发性能,通常不推荐用于高频操作。
    • 先删除缓存,再更新数据库

      • 写操作
        1. 删除 Redis 缓存。
        2. 更新数据库。
      • 潜在问题
        • 问题1:并发读写导致不一致。线程A删除缓存,此时线程B发起读请求,发现缓存未命中,从数据库读取旧数据并写入缓存。然后线程A完成数据库更新。导致缓存中是旧数据,数据库是新数据。
          • 解决方案:通常不推荐这种模式,除非能很好地处理并发。
    • 先更新数据库,再更新缓存 (Write Through 部分变体)

      • 写操作
        1. 更新数据库。
        2. 更新 Redis 缓存。
      • 潜在问题
        • 问题1:更新缓存失败。数据库更新成功,但更新缓存失败,导致不一致。
        • 问题2:写并发问题。如果两个写请求并发,可能导致缓存和数据库顺序不一致。例如,请求1先写库,请求2后写库;但请求2先写缓存,请求1后写缓存,导致缓存是旧数据。
        • 问题3:写放大。如果缓存的数据结构复杂或需要计算,每次更新都去更新缓存可能开销较大。
      • 解决方案:通常,删除缓存比更新缓存更简单、开销更小,且不易出错。
  2. 设置合理的缓存过期时间 (TTL - Time To Live)

    • 这是保证最终一致性的重要手段。即使因为某些原因(如删除缓存失败),缓存中的脏数据也会在 TTL 到期后自动失效。
    • TTL 的长短需要根据业务对数据一致性的容忍度来权衡。对一致性要求高的,TTL 设置短一些;容忍度高的,可以设置长一些以提高缓存命中率。
    • 可以结合热点数据预热和动态调整 TTL 的策略。
  3. 异步更新/删除缓存

    • 使用消息队列 (MQ)
      1. 应用更新数据库。
      2. 发送一个消息到 MQ,消息内容包含需要失效或更新的缓存 Key。
      3. 一个独立的消费者服务订阅 MQ,接收消息并执行缓存删除或更新操作。
    • 优点
      • 解耦应用和缓存操作,应用更新数据库后可以快速返回。
      • MQ 的重试和持久化机制可以保证缓存操作的最终成功。
    • 缺点:引入了 MQ 增加了系统复杂度,且存在一定的延迟(应用写库和缓存失效之间)。
  4. 订阅数据库变更日志 (CDC - Change Data Capture)

    • 工具如 Canal (MySQL)、Debezium (PostgreSQL, SQL Server, Oracle 等) 可以订阅数据库的事务日志 (如 binlog)。
    • 当数据库数据发生变化时,CDC 工具捕获这些变更,并将变更事件发送到消息队列或直接触发缓存更新/删除逻辑。
    • 优点
      • 对应用代码侵入性小。
      • 可以保证只要数据库有更新,缓存就能收到通知。
      • 比应用层面手动操作更可靠。
    • 缺点:部署和维护 CDC 工具会增加系统复杂度。
  5. 读写锁/分布式锁 (谨慎使用)

    • 在对一致性要求极高的场景(通常不适合缓存),可以在更新数据和对应缓存时使用分布式锁,确保同一时间只有一个线程操作。
    • 这会严重影响并发性能,通常只在特定关键操作或缓存预热/重建时考虑。

总结与推荐

  • 首选策略先更新数据库,再删除缓存 (Cache Aside Pattern with Write Invalidate)。这是业界最常用且相对简单的方案。
  • 兜底机制务必为所有缓存设置合理的过期时间 (TTL)。这是保证最终一致性的最后一道防线。
  • 可靠性增强
    • 对于删除缓存失败的情况,可以引入消息队列进行异步重试删除
    • 更健壮的方案是采用 CDC (如 Canal) 订阅数据库变更日志来异步失效缓存

选择哪种策略取决于业务场景对一致性、性能、复杂度的具体要求。通常,一个组合策略(例如,Cache Aside + TTL + MQ/CDC 异步失效)能提供较好的平衡。

http://www.dtcms.com/a/491638.html

相关文章:

  • 华清远见25072班QT学习day2
  • 数据质量:Great Expectations检查点,校验失败怎样处理?
  • Ethernaut Level 12: Privacy - 存储布局分析
  • arkTs:鸿蒙开发中使用模型(Model)类封装数据与方法
  • Ethernaut Level 11: Elevator - 接口实现攻击
  • 恶意软件行为图像数据集
  • 如何找到网站管理员做房产应看的网站
  • Profibus DP转Modbus RTU工业PLC网关赋能新能源电站高效协同运行
  • 免费网站建设 源代码哪些网站是做设计的
  • 第8篇:Jackson与Spring Boot:实战整合技巧
  • 整套网站建设视频教程淮北建设工程交易中心
  • F027 neo4j知识图谱音乐推荐系统vue+flask+知识图谱可视化+协同过滤推荐算法
  • 仪器网站模板打包wordpress为app
  • Java SPI 完整加载流程详解-JAR 包到类实例化
  • MySQL Workbench:MySQL官方管理开发工具
  • 七宝网站建设行业seo网站优化方案
  • Unity 光照贴图异常修复笔记
  • 算法训练之BFS解决最短路径问题
  • h5手机端网站开发西安软件开发公司
  • DataFrame对象的iterrows()方法
  • 【Java零基础·第8章】面向对象(四):继承、接口与多态深度解析
  • 网站规划建设与管理维护大作业中国传统文化网页设计
  • 空气能空调如何做网站做酒店网站多少钱
  • 小道消息:某国产数据库迁移中途失败
  • AI+量化 的数据类型有哪些
  • 外贸网站如何seo推广常用网站如何在桌面做快捷方式
  • 遇到的问题:缺少ClickTo Run Service
  • [创业之路-699]:企业与高校:模式错配的警示与适配路径的探索
  • 电脑做系统都是英文选哪个网站怎么做局域网网站
  • 源丰建设有限公司网站如何做推广最有效果