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

在这里插入图片描述

文章目录

    • 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分布式锁实现方式

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dart 3.4 发布:Wasm Native Macros(宏)

Google I/O 的结束,除了 Flutter 3.22 的发布 ,Dart 3.4 也迎来了它是「史诗级」的更新,之所以这么说,就是因为 Wasm Native 的落地和 Macros 的实验性展示。 在此之前,其实我也提前整理过一些对应的内容,…

Web课外练习7

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>照片墙</title><style>body {display: …

基于物联网、大数据的企业智能设备管理系统的实践解读

随着物联网、大数据的迅速发展&#xff0c;智能化设备管理系统已经渗透到我们工作的方方面面。然而&#xff0c;传统企业设备管理也迈入智能化、无纸化的管理趋势。因此&#xff0c;智能设备管理系统有了很大的应用需求&#xff0c;智能设备管理系统以数字化技术&#xff0c;为…

好文推荐:基于热红外的双源能量平衡(TSEB)模型--从植物到全球尺度的蒸散诊断简史

文献 近日&#xff0c;美国农业部农业研究服务局&#xff08;USDA-ARS&#xff09;的科学家们发表了一篇重要的研究论文——“Agricultural and Forest Meteorology” &#xff08;https://www.sciencedirect.com/journal/agricultural-and-forest-meteorology&#xff09;&…

ShellCode详解三

直接进入正题。 在完成正式的shellcode代码导出之前&#xff0c;我们先手动的对代码进行导出&#xff0c;以使各位同学更加了解其原理。 手动注入shellcode 1、我们利用DLE工具找到上一节中我们生成的PE文件的代码段位置 上述图片就是我们的代码段位置 2、利用WinHex工具我…

Kotlin协程实战指南:解锁Android开发高效能新时代

前言 在移动互联网的狂飙突进之中&#xff0c;Android开发领域如同站在风口的勇士&#xff0c;不断接受技术迭代与创新的双重洗礼。在这个快速变化的市场里&#xff0c;用户对应用性能和体验的期待水涨船高&#xff0c;开发者们面临的挑战也越来越大&#xff1a;如何在功能的丰…

php后端通过ajax接口返回二进制数据流,让前端下载excel文件(ajax传递json参数)

//导出数据function exportUser() {var url ?mUser&auserDeal&actexportUser;var data JSON.stringify({user_province:$(#province).val(),user_city: $(#city).val(),user_area: $(#area).val(),user_depart: $(#user_depart).val(),user_offices: $(#user_office…

Jumia跨境电商自养号补单测评的最新技术和策略

Jumia作为非洲最大的电商平台之一&#xff0c;成立于2012年&#xff0c;也是唯一一家真正意义上覆盖全非洲的电商平台&#xff0c;主要覆盖尼日利亚、摩洛哥、埃及、肯尼亚、巴基斯坦、科洛迪瓦等11个国家。 各个站点是分开运营的&#xff0c;各自有独立的前后台&#xff0c;J…

写一个类ChatGPT应用,前后端数据交互有哪几种

❝ 对世界的态度&#xff0c;本质都是对自己的态度 ❞ 大家好&#xff0c;我是「柒八九」。一个「专注于前端开发技术/Rust及AI应用知识分享」的Coder 前言 最近&#xff0c;公司有一个AI项目&#xff0c;要做一个文档问答的AI产品。前端部分呢&#xff0c;还是「友好借鉴」Cha…

智慧公厕系统:改变“上厕所”体验的科技革新

公共厕所是城市建设中不可或缺的基础设施&#xff0c;然而&#xff0c;由于较为落后的管理模式&#xff0c;会常常存在着管理不到位、脏乱差的问题。为了改善公厕的使用体验&#xff0c;智慧公厕系统应运而生&#xff0c;并逐渐成为智慧城市建设的重要组成部分。本文将以智慧公…

德昂信息-Wyn助力构建HR人员信息分析看板

”葡萄城的Wyn商业智能软件产品为德昂信息提供了强大的支持&#xff0c;借助Wyn商业智能软件&#xff0c;可以通过可视化方式展示整个公司的人员信息及其分析看板。“ ——德昂信息技术(北京)有限公司 公司简介 德昂信息技术(北京)有限公司&#xff08;以下简称德昂信息&…

谷歌的 Astra 是其首款人工智能代理

谷歌将于今年晚些时候推出一款名为 Astra 的新系统&#xff0c;并承诺它将成为迄今为止推出的最强大、最先进的人工智能助手。 当前一代的人工智能助手&#xff0c;例如 ChatGPT&#xff0c;可以检索信息并提供答案&#xff0c;但仅此而已。但今年&#xff0c;谷歌将其助手重…

力扣HOT100 - 322. 零钱兑换

解题思路&#xff1a; 动态规划 class Solution {public int coinChange(int[] coins, int amount) {int[] dp new int[amount 1];Arrays.fill(dp, amount 1);dp[0] 0;for (int i 1; i < amount; i) {for (int j 0; j < coins.length; j) {if (coins[j] < i) …

探索设计模式的魅力:机器学习赋能,引领“去中心化”模式新纪元

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 探索设计模式的魅力&#xff1a;机器学习赋能&#xff0c;引领“去中心化”模式新纪元 ✨欢迎加入…

Linux 生态与工具

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 目录 Linux生态简介:Linux工具lrzsz&#xff…

简单的DbUtils工具类【精细】

目录 单条通用增删改方法 1.创建maven项目&#xff0c;并加载依赖 2.创建数据库连接工具类(Dbutils类) 3.创建一个执行器(SqlExecutor类) 4.通用(增&#xff0c;删&#xff0c;改)方法 1.创建方法 2.创建userInfo实体类 3.创建测试类&#xff0c;测试增&#xff0c;删&#xf…

k8s的整体架构及其内部工作原理,以及创建一个pod的原理

一、k8s整体架构 二、k8s的作用&#xff0c;为什么要用k8s&#xff0c;以及服务器的发展历程 1、服务器&#xff1a;缺点容易浪费资源&#xff0c;且每个服务器都要装系统&#xff0c;且扩展迁移成本高 2、虚拟机很好地解决了服务器浪费资源的缺点&#xff0c;且部署快&#x…

量化研究---A股赚钱日历,上证指数为例,提供源代码

今天把A股的全部数据导出做了一些赚钱日历分析&#xff0c;看那个月赚钱容易&#xff0c;那个月赚钱困难 导入需要的库 import pandas as pdimport matplotlib.pyplot as pltimport quantstats as qsfrom trader_tool.index_data import index_datafrom trader_tool import j…

IT行业的革新力量:技术进步与未来展望

在当今时代&#xff0c;信息技术&#xff08;IT&#xff09;行业无疑是全球经济的重要推动力之一。随着数字化转型的不断深入&#xff0c;IT行业的边界正在扩大&#xff0c;它不仅包括传统的软硬件开发、网络建设和运维服务&#xff0c;还涵盖了云计算、大数据、人工智能&#…

Http常见问题

这里写自定义目录标题 1. 常见状态码2. HTTP3. HTTP2 1. 常见状态码 2 xxx&#xff1a;成功 4 xxx&#xff1a;一一般是前端错误 5 xxx&#xff1a;一般是后端错误 2. HTTP 记住二点&#xff1a; 无连接&#xff1a;每次连接只处理一个请求&#xff0c;服务器处理完客户的…