iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL数据怎么同步到Redis缓存
  • 679
分享到

MySQL数据怎么同步到Redis缓存

2023-07-05 12:07:34 679人浏览 八月长安
摘要

这篇“MySQL数据怎么同步到Redis缓存”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql数据怎么同步到Redis

这篇“MySQL数据怎么同步到Redis缓存”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mysql数据怎么同步到Redis缓存”文章吧。

1 mysql查完数据,再同步写入到Redis中

缺点1:会对接口造成延迟,因为同步写入redis本身就有延迟,并且还要做重试,如果redis写入失败,还需要重试,那就更费时间了。

缺点2:不解耦,如果redis崩了,那直接卡线程

缺点3:如果人为该数据库,那就没法同步了, 除非再人为删除对应的Redis,但删除Redis这个过程也有个时间差

2 Mysql查完数据,通过发送MQ,在消费者线程去同步Redis

缺点1:多了层MQ,也就是会有很大的概率导致同步延迟问题.

缺点2:要对MQ的可用性做预防

缺点3:如果人为该数据库,那就没法同步了

优点1:可以大幅减少接口的延迟返回的问题

优点2:MQ本身有重试机制,无需人工去写重试代码

优点3:解耦,把查询Mysql和同步Redis完全分离,互不干扰

3 订阅Mysql的Binlog文件(可借助Canal来进行)

CanalServer会伪装成MysqlServer从库,去订阅MysqlServer主库的Binlog文件

Canal启动的时候会配置对应的消息MQ(RabbitMQ, RocketMQ, kafka), 监听到Binlog文件有变化是,会把变化的sql语句转换成JSON格式,并作为消息内容发送到MQ中

项目中只要监听对应MQ,就能拿到Binlog改动的内容,json数据中有明确的操作类型(CURD), 以及对应的数据。把对应数据同步到redis即可

缺点1:canal订阅Binlog的整个操作过程是单线程的,所以面临超高并发的情况下,性能可能不太出色。当然可以部署多个Canal 与 多个消费者,但是要注意消息重复消费问题,做好幂等性校验

优点1:即使人为改数据库,也会监听到,并且也会同步

优点2:异步同步,不会对接口返回有格外延迟

4 延迟双删

在执行修改sql之前,先将redis的数据删除

执行更新sql

延迟一段时间

再次删除redis的数据

// 延迟双删伪代码deleteRedisCache(key);   // 删除redis缓存updateMysqlSql(obj);        // 更新mysqlThread.sleep(100);           // 延迟一段时间deleteRedisCache(key);   // 再次删除该key的缓存

缺点:这个延迟时间不好把控,到底延迟多久,这个很难去评估

扩展: 如果不使用延迟双删,仅仅是delete缓存,然后改mysql数据。只有这两步会出现什么问题呢?

单个请求,单线程没问题,高并发多线程下会出问题

如果Thread1线程要更新数据,此时Thread1线程把redis清理了

此时Thread2线程来了,但Thread1还没有更新mysql完毕

Thread2查询redis肯定是null,此时Thread2就要查mysql了,然后再把查到的数据写到缓存

由于Thread1还没来得及修改mysql数据,所以此时Thread2查出来的数据是【旧数据】,Thread2把旧数据又写入Redis 了

此时Thread3线程来了,查询Redis发现有数据,则直接拿缓存数据了,此时【Thread3查出来的是旧数据】,直接带着旧数据返回了,这就是问题所在

而延迟双删的第二次删除作用就是防止Thread2把旧数据又写入了,有了延迟双删,Thread3查询Redis的时候还是null,就会从mysql 去拿最新数据了

所以正常的这个延迟时间,应该是Thread2查缓存到拿mysql数据,到再保存到redis这整个时间,作为Thread1的延迟时间,但是这个Thread2这个过程的时间会受到很多因素影响,因此很难断定究竟会是多久

5 延迟双写

// 延迟双写伪代码updateMysqlSql(obj);        // 更新mysqladdRedis(key);   // 再次删除该key的缓存

上述代码缺陷;

  • 高并发下,两条线程同时执行上面代码,并对mysql 修改,且修改内容不通,可能会导致Redis与Mysql数据不一致

  • T1线程执行完updateMysqlSql,释放了行,此时T2线程再执行updateMysqlSql 与 addRedis, 最后T1执行addRedis,这种情况会导致数据库改成了T2线程的数据,但Redis却是T1线程的数据

优化

// 完美延迟双写伪代码开启事务updateMysqlSql(obj);        // 更新mysqladdRedis(key);   // 再次删除该key的缓存提交事务

上述代码改正:

把两句代码放到一个事务里面,只有T1执行完Mysql 与 Redis的时候,T2才能开始执行,就可以保证数据一致性。推荐使用分布式

双写缺点:Mysql 与 Redis是单线程的。性能方面不行,因此不推荐使用

以上就是关于“MySQL数据怎么同步到Redis缓存”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据怎么同步到Redis缓存

本文链接: https://www.lsjlt.com/news/351835.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL数据怎么同步到Redis缓存
    这篇“MySQL数据怎么同步到Redis缓存”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL数据怎么同步到Redis...
    99+
    2023-07-05
  • 浅谈MySQL数据同步到Redis缓存的几种方法
    目录1 Mysql查完数据,再同步写入到Redis中2 Mysql查完数据,通过发送MQ,在消费者线程去同步Redis3 订阅Mysql的Binlog文件(可借助Canal来进行)4...
    99+
    2023-03-19
    MySQL数据同步到Redis缓存 MySQL数据同步
  • 浅谈MySQL数据同步到 Redis 缓存的几种方法
    目录1 mysql查完数据,再同步写入到Redis中2 Mysql查完数据,通过发送MQ,在消费者线程去同步Redis3 订阅Mysql的Binlog文件(可借助Canal来进行)4 延迟双删5 延迟双写6 总结1 My...
    99+
    2023-03-19
    MySQL数据同步到Redis缓存 MySQL数据同步
  • MySQL与redis缓存怎么实现同步
    MySQL与redis缓存怎么实现同步?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、方案1(UDF)场景分析:当我们对MySQL数据库进行数据操作时,同时将...
    99+
    2023-06-14
  • Redis作为缓存,mysql的数据如何与redis进行同步?
    Redis作为缓存,mysql的数据如何与redis进行同步? 一定要设置前提,先介绍业务背景 延时双删 双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致 读操...
    99+
    2023-10-11
    redis
  • MySQL 与 Redis 缓存的同步方案
    MySQL 与 Redis 缓存的同步方案 概述 MySQL 和 Redis 都是常见的数据存储方案,MySQL 用于存储结构化数据,Redis 用于存储非结构化数据。在一些高并发场景下,为了提升系统...
    99+
    2023-09-14
    redis 缓存 mysql
  • mysql和redis数据怎么同步
    可以通过将MySQL数据同步到Redis中来实现数据同步。以下是一种常见的方法: 编写一个定时任务或者触发器,在MySQL数据库上...
    99+
    2024-04-22
    redis mysql
  • Mysql数据怎么同步到Greenplum
    本篇内容主要讲解“Mysql数据怎么同步到Greenplum”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql数据怎么同步到Greenplum”吧!一、资源信息这边就不赘述二、配置相关数据...
    99+
    2023-06-01
  • 浅谈MySQL与redis缓存的同步方案
    目录一、方案1(UDF)演示案例二、方案2(解析binlog)Canal开源技术三、附加本文介绍MySQL与Redis缓存的同步的两种方案 方案1:通过MySQL自动同步刷新R...
    99+
    2024-04-02
  • 如何将mysql用户数据同步到redis
    要将MySQL用户数据同步到Redis,可以使用以下步骤:1. 首先,连接到MySQL数据库,并查询出需要同步的用户数据。可以使用M...
    99+
    2023-08-31
    redis mysql
  • mysql 数据导入redis缓存
    假设表结构如下 CREATE TABLE sas_sys_app (user_id varchar(38) DEFAULT NULL,app_id int(11) DEFAULT NULL) EN...
    99+
    2024-04-02
  • redis怎么同步数据库
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-21
  • redis怎么实现数据同步
    Redis可以通过以下几种方式实现数据同步:1. 主从复制:Redis支持主从复制,即将一台Redis服务器作为主服务器,其他Red...
    99+
    2023-08-23
    redis
  • redis怎么和数据库同步
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-21
  • node.js中怎么将MongoDB数据同步到MySQL
    node.js中怎么将MongoDB数据同步到MySQL,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。环境node.jsMon...
    99+
    2024-04-02
  • Redis中怎么缓存MySQL
    本篇文章为大家展示了Redis中怎么缓存MySQL,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mys...
    99+
    2024-04-02
  • redis怎么和mysql同步
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-21
  • redis怎么缓存整个数据库
    要将整个数据库缓存到Redis中,可以使用Redis的持久化机制。Redis提供了两种持久化方法:RDB(Redis Databas...
    99+
    2023-08-23
    redis 数据库
  • MySQL 到Oracle 实时数据同步
    目录第一步:配置MySQL 连接第二步:配置 Oracle连接第四步:进行数据校验其他数据库的同步操作摘要:很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同...
    99+
    2024-04-02
  • redis数据怎么同步中间件
    Redis数据同步中间件可以使用Redis Sentinel或Redis Cluster来实现。1. Redis Sentinel:...
    99+
    2023-08-30
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作