Redis-如何保证与Mysql数据一致性

news2024/12/23 13:36:57

在这里插入图片描述

文章目录

    • Redis与Mysql数据一致性的情况有哪些?
    • Redis与Mysql数据保持一致性的方案?
      • 同步双写机制
      • 删除缓存重新加载机制
      • 延迟双删机制
      • 利用MQ保持数据一致性
    • 本篇小结

更多相关内容可查看

Redis与Mysql数据一致性的情况有哪些?

Redis和MySQL是两种不同类型的数据库,它们在数据存储和处理的方式上存在一些差异。以下是一些可能导致Redis与MySQL数据不一致的情况:

  • 缓存同步延迟: Redis通常被用作缓存层来提高读取性能,而MySQL作为主要的持久化存储。如果应用程序在写入MySQL后未及时更新Redis缓存,就会导致Redis中的数据与MySQL中的数据不一致。这种情况通常发生在系统架构设计不当或者缓存策略设置有问题的情况下。
  • 缓存过期策略: Redis中的数据可以设置过期时间。如果数据在MySQL中发生变化,而Redis中的数据尚未过期或更新,就会导致数据不一致。这种情况下,缓存的过期策略需要根据业务需求和数据更新频率进行调整。
  • 网络或系统故障: 在数据传输过程中,网络故障或服务器故障可能导致部分数据未正确同步到Redis或MySQL,从而导致数据不一致。
  • 并发写入操作: 如果在并发写入的情况下,同时对MySQL和Redis进行写入操作,有可能会导致数据不一致。这是因为MySQL和Redis操作的原子性不同,MySQL支持ACID(原子性、一致性、隔离性、持久性),而Redis的操作不保证强一致性。

Redis与Mysql数据保持一致性的方案?

同步双写机制

先更新Mysql,再更新Redis,这个时候如果更新Redis失败,可能仍然不⼀致

删除缓存重新加载机制

先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中
⽐如线程1删除了 Redis缓存数据,还没有来得及更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中

延迟双删机制

Redis 的延迟双删策略:
在 Redis 中,主节点和从节点之间的数据同步通常通过主从复制实现。Redis 使用主从复制来实现数据的备份和读写分离,其中主节点负责处理写请求,从节点负责处理读请求。
Redis 的延迟双删策略通常是指在主节点执行删除操作后,不立即向所有从节点发送删除指令,而是将待删除键的信息放入一个待删除键列表中。然后,定期或根据一定条件,主节点将待删除键列表中的键发送给所有从节点。从节点收到待删除键列表后,首先将列表中的键标记为待删除状态,而不是立即删除。在一段时间后,再次检查待删除键列表,如果这些键仍然存在,表示可能有读请求在此期间访问了这些键,那么就执行第二次删除操作,确保从节点的数据与主节点保持一致。
MySQL 的延迟双删策略:
在 MySQL 主从复制中,主库(master)负责处理写操作,从库(slave)负责复制主库的数据。在 MySQL 中,为了保证主从复制的数据一致性,通常会使用延迟双删策略。
MySQL 的延迟双删策略类似于 Redis,主要是指主库在执行删除操作后,并不立即向所有从库发送删除指令,而是将待删除数据的信息先记录到 binlog 中。从库在读取 binlog 并执行删除操作时,也会先将待删除数据标记为待删除状态,然后等待一段时间。在此期间,如果发现有查询操作需要读取已经被标记为待删除的数据,那么就暂时不执行删除操作,以保证数据的一致性。在一定时间后,再次检查待删除数据,如果依然存在,则执行删除操作。
4. 对于一致性要求不高的场景, 也可以使用MQ异步同步, 保证数据的最终一致性 , 不需要直接删除

利用MQ保持数据一致性

对于一致性要求不高的场景, 也可以使用MQ异步同步, 保证数据的最终一致性 , 不需要直接删除

本篇小结

其他Redis的相关问题链接如下
Redis数据持久化策略
Redis数据过期策略
Redis数据淘汰策略
Redis集群方案
Redis主从同步
Redis分片集群如何存储及读取数据
Redis的缓存穿透、缓存击穿、缓存雪崩及解决方案
Redis分布式锁实现方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1680926.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3 自定义组件

在项目中,我们会遇到一些没有现成的组件,那这个时候我们就需要自己去写一个满足我们需求的组件。 比如,我需要一个上下排布,上面显示标题,下面显示内容的组件。封装完成后方便复用。 1、布局组件 我定义一个上下结构的…

Git使用(4):分支管理

一、新建分支 首先选择Git -> Branches... 然后选择 New Branch,输入新分支名称,例如dev。 可以看到右下角显示已经切换到新建的dev分支了。 push到远程仓库,可以看到新添加的分支。 二、切换分支与合并分支 为了演示合并分支&#xff0c…

Linux(七) 动静态库

目录 一、动静态库的概念 二、静态库的打包与使用 2.1 静态库的打包 2.2 静态库的使用 三、动态库的打包与使用 3.1 动态库的打包 3.2 动态库的使用 3.3 运行动态库的四种方法 四、总makefile 一、动静态库的概念 静态库: Linux下,以.a为后缀的…

Python——IO编程

IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。 比如你打开浏览器,访问新浪…

蓝桥杯 EDA 组 历届国赛真题解析

一、2021年国赛真题 1.1 CN3767 太阳能充电电路 CN3767 是具有太阳能电池最大功率点跟踪功能的 4A,12V 铅酸电池充电管理集成电路。 最大功率点应指的是电池板的输出电压,跟踪电压其做保护。当然 CN3767 也可以直接使用直流充电,具体可以阅读…

污水处理环保设备厂商怎么选

在选择污水处理环保设备厂商时,需要综合考虑多个因素来确保选取的供应商能够提供高质量的设备和服务。以下是一些主要的考虑因素: 企业资质和认证:首先检查供应商是否拥有相关的资质证书和行业认证,例如ISO 9001质量管理体系认证、…

0基础安装 composer

解决: composer 不是内部或外部命令,也不是可运行的程序 或批处理文件。 php composer.phar可以运行 安装环境:系统w11 官网地址:Composer 1.安装composer 1.1打开命令行窗口 在命令行窗口里,右键是粘贴&#xff0…

Java | Leetcode Java题解之第92题反转链表II

题目: 题解: class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {// 设置 dummyNode 是这一类问题的一般做法ListNode dummyNode new ListNode(-1);dummyNode.next head;ListNode pre dummyNode;for (int i 0; …

【数组的度】leetcode,python

一种很菜的做法(暴力),for循环(样例能过一大半呢,复杂度的话。。。) class Solution:def findShortestSubArray(self, nums: List[int]) -> int:nlen(nums)if n1:return nmx1#出现次数最多的计算for i …

Google:站长移除无效网址

当您的网址不需要呈现在Google站长中时,您可以在站长工具中移除网址 操作步骤:登录Google站长,绑定网站完成后,点击左侧删除 >> 输入网址 如果遇到一些网址,可以找寻网址间的规律,比如说&#xff0…

【oracle】图片转为字节、base64编码等形式批量插入oracle数据库并查询

1.熟悉、梳理、总结下Oracle相关知识体系 2.欢迎批评指正,跪谢一键三连! 资源下载: oci.dll、oraocci11.dll、oraociei11.dll3个资源文件资源下载: Instant Client Setup.exe资源下载: oci.dll、oraocci11.dll、oraoc…

java代码混淆工具ProGuard混淆插件

java代码混淆工具ProGuard混淆插件 介绍 ProGuard是一个纯java编写的混淆工具,有客户端跟jar包两种使用方式。可以将程序打包为jar,然后用工具进行混淆,也可以在maven中导入ProGuard的插件,对代码进行混淆。 大家都知道 java代…

【SQL】SQL常见面试题总结(1)

目录 1、检索数据1.1、从 Customers 表中检索所有的 ID1.2、检索并列出已订购产品的清单1.2、检索所有列 2、排序检索数据2.1、检索顾客名称并且排序2.2、对顾客 ID 和日期排序2.3、按照数量和价格排序2.4、检查 SQL 语句 3、过滤数据3.1、返回固定价格的产品3.2、返回产品并且…

基于Vue和uni-app的增强型单选ccRadioView组件开发

标题:基于Vue和uni-app的增强单选组件ccRadioView的设计与实现 摘要:本文将详细介绍如何使用Vue和uni-app构建一个简单、好用且通用的单选框组件ccRadioView。该组件提供了单选列表的功能,并支持反向传值,方便开发者快速实现单选…

新人学习笔记值(初始JavaScript)

一、Java Script是什么 1.Java Script是世界上最流行的语言之一,是一种运行在客户端的脚本语言(script是脚本的意思) 2.脚本语言:不需要编译,运行过程中由js解释器(js引擎)进行解释并运行 3.现在…

如何同步管理1000个设备的VLAN数据?

什么是VLAN? VLAN,也就是虚拟局域网,是通过为子网提供数据链路连接来抽象出局域网的概念。在企业网中,一个企业级交换机一般是24口或者是48口,连接这些接口的终端在物理上形成一个广播域。广播域过大,就会导…

docker镜像中搭建FastDfs

docker镜像中搭建FastDfs 一、搭建过程二、docker端口映射三、映射的方法三、配置Tracker 和 Storage 环境:腾讯云服务器上 ubuntu20.04镜像 一、搭建过程 正常直接在云服务器上搭建过程参考博客: https://blog.csdn.net/qq_38531706/article/details/…

基于51单片机的AD/DA转换的串口通信proteus仿真(附源码)

文章目录 一、前言二、PCF85911.介绍2.原理图3.引脚介绍 三、仿真图1.未仿真时2.仿真时 四、仿真程序main.cIIC.c 五、总结 一、前言 AT89C52是一款经典的8051系列单片机,它通常不包含内置的模数转换器(ADC)或数字模拟转换器(DAC…

模版方法详解

模板方法模式 1 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相…

DS高阶:跳表

一、skiplist 1.1 skiplist的概念 skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为key或者key/value的查找模型。skiplist是由William Pugh发明的,最早出现于他在1990年发…