我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL数据怎么同步到Redis缓存

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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缓存”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL数据怎么同步到Redis缓存

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

下载Word文档

猜你喜欢

MySQL数据怎么同步到Redis缓存

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

浅谈MySQL数据同步到Redis缓存的几种方法

本文主要介绍了浅谈MySQL数据同步到Redis缓存的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-19

浅谈MySQL数据同步到 Redis 缓存的几种方法

目录1 mysql查完数据,再同步写入到Redis中2 Mysql查完数据,通过发送MQ,在消费者线程去同步Redis3 订阅Mysql的Binlog文件(可借助Canal来进行)4 延迟双删5 延迟双写6 总结1 Mysql查完数据,再同
2023-03-19

MySQL与redis缓存怎么实现同步

MySQL与redis缓存怎么实现同步?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、方案1(UDF)场景分析:当我们对MySQL数据库进行数据操作时,同时将
2023-06-14

mysql和redis数据怎么同步

可以通过将MySQL数据同步到Redis中来实现数据同步。以下是一种常见的方法:编写一个定时任务或者触发器,在MySQL数据库上监听数据变化。当MySQL数据库中的数据发生变化时,将变化的数据同步到Redis中。可以通过使用Redis的
mysql和redis数据怎么同步
2024-04-22

Mysql数据怎么同步到Greenplum

本篇内容主要讲解“Mysql数据怎么同步到Greenplum”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql数据怎么同步到Greenplum”吧!一、资源信息这边就不赘述二、配置相关数据
2023-06-01

如何将mysql用户数据同步到redis

要将MySQL用户数据同步到Redis,可以使用以下步骤:1. 首先,连接到MySQL数据库,并查询出需要同步的用户数据。可以使用MySQL的SELECT语句来获取用户表中的数据。2. 然后,连接到Redis数据库,并使用Redis的SET
2023-08-31

redis怎么同步数据库

您可以使用以下方法同步数据库到 redis 中:使用 redis replication 主从复制机制,创建主节点和从节点,将数据复制到从节点。使用第三方工具,如 redis-rsync、redis-exporter、redis-queue
redis怎么同步数据库
2024-05-21

redis怎么和数据库同步

共有三种实现 redis 和数据库同步的方法:使用 redis 发布和订阅功能;使用 redis 流;使用第三方工具,如 updatefromredis、redisson 或 redis-db-sync。如何实现 Redis 和数据库同步
redis怎么和数据库同步
2024-05-21

redis怎么实现数据同步

Redis可以通过以下几种方式实现数据同步:1. 主从复制:Redis支持主从复制,即将一台Redis服务器作为主服务器,其他Redis服务器作为从服务器。主服务器将更新操作写入日志,并将日志发送给从服务器进行同步。从服务器接收并执行日志,
2023-08-23

redis怎么和mysql同步

redis 与 mysql 同步如何将 Redis 与 MySQL 同步?实现 Redis 与 MySQL 之间的同步,有以下几种方法:1. 使用代理工具Redis Sentinel:是一种分布式 Redis 代理,可以自动故障转移,
redis怎么和mysql同步
2024-05-21

redis怎么缓存整个数据库

要将整个数据库缓存到Redis中,可以使用Redis的持久化机制。Redis提供了两种持久化方法:RDB(Redis Database)和AOF(Append-Only File)。RDB是Redis默认的持久化方式。它会在指定的时间间隔内
2023-08-23

编程热搜

目录