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

Redis、Mysql双写情况下,如何保证数据一致

Redis、Mysql双写情况下,如何保证数据一致

  • 场景
  • 谈谈数据一致性
  • 三个经典的缓存模式
    • Cache-Aside Pattern
      • 读流程
      • 写流程
    • Read-Through/Write-Through(读写穿透)
    • Write behind (异步缓存写入)
  • 操作缓存的时候,删除缓存呢,还是更新缓存?
  • 双写的情况下,先操作数据库还是先操作缓存?
  • 参考地址

场景

在几乎所有的使用缓存和数据库的项目中,几乎都会存在这样的场景,更新数据时需要更新mysql中的表数据,同时还需要更新缓存。
但因为具体的业务场景不同,所以对mysql redis里的数据一致性的 要求等级也不一样,所以,我们先谈下对数据一致性的要求问题。

谈谈数据一致性

在这里插入图片描述
一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。

  • 强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大
  • 弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态
  • 最终一致性:最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。这里之所以将最终一致性单独提出来,是因为它是弱一致性中非常推崇的一种一致性模型,也是业界在大型分布式系统的数据一致性上比较推崇的模型

三个经典的缓存模式

Cache-Aside Pattern

Cache-Aside Pattern,即旁路缓存模式,它的提出是为了尽可能地解决缓存与数据库的数据不一致问题。

读流程

在这里插入图片描述
1.读的时候,先读缓存,缓存命中的话,直接返回数据
2.缓存没有命中的话,就去读数据库,从数据库取出数据,放入缓存后,同时返回响应。

写流程

在这里插入图片描述
更新的时候,先更新数据库,然后再删除缓存。

Read-Through/Write-Through(读写穿透)

Write behind (异步缓存写入)

操作缓存的时候,删除缓存呢,还是更新缓存?

双写的情况下,先操作数据库还是先操作缓存?

参考地址

参考地址

相关文章:

  • 【分布式】——CAPBASE理论
  • FFMPEG对于处理rtp流出现马赛克问题处理
  • [超细] npm 版本号规范升级流程
  • jvm(虚拟机)运行时数据区域介绍
  • Vue挂载全局方法
  • Docker 夺命连环 15 问
  • 【深度学习】YOLO检测器的发展历程
  • Java并发编程: 第九章 异步编程
  • 图解Kafka架构学习笔记(二)
  • 【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析
  • DC电源模块的设计与制造流程
  • 基于Python的商品评论文本情感分析
  • 【Pt】马灯贴图绘制过程 02-制作锈迹
  • 字符串的函数
  • 跟着cherno手搓游戏引擎【29】Batch简单合批
  • 《深入 React 技术栈》
  • css系列之关于字体的事
  • es6(二):字符串的扩展
  • iOS 颜色设置看我就够了
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java多态
  • LeetCode算法系列_0891_子序列宽度之和
  • SOFAMosn配置模型
  • 二维平面内的碰撞检测【一】
  • 分享几个不错的工具
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 和 || 运算
  • 码农张的Bug人生 - 初来乍到
  • 前端之React实战:创建跨平台的项目架构
  • 实现菜单下拉伸展折叠效果demo
  • 收藏好这篇,别再只说“数据劫持”了
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • PostgreSQL之连接数修改
  • 翻译 | The Principles of OOD 面向对象设计原则
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 达梦数据库知识点
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (搬运以学习)flask 上下文的实现
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (十一)图像的罗伯特梯度锐化
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .apk文件,IIS不支持下载解决
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .htaccess 强制https 单独排除某个目录
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • @31省区市高考时间表来了,祝考试成功
  • @Autowired和@Resource装配
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [《百万宝贝》观后]To be or not to be?