当前位置: 首页 > 网络应用技术

确保Redis和MySQL数据一致性

时间:2023-03-06 18:29:47 网络应用技术

  :加速阅读和写作:因为缓存通常是完整的内存,并且存储层通常不够强大(例如MySQL),因此它可以通过使用缓存来优化用户体验来有效地加速读取和写入读写。背部 - 末端负载:帮助访问量和复杂计算的后端减少(例如,非常复杂的SQL语句),该计算大大减少了后端负载。

  :数据不一致:缓存层和存储层的数据具有时间窗口的不一致,并且时间窗口与更新策略有关。代码维护成本:添加缓存后,缓存层的逻辑和需要同时处理存储层,以增加开发人员维护代码的成本。操作和维护成本:以Redis群集为例。加入后,增加了操作和维护成本。

  路口

  选项1:手动清除redis缓存,重新检查mysql。

  选项2:阿里巴巴的运河异步订阅mysql binlog文件已同步。

  MySQL80%的性能问题全部阅读。当我们的数据库同时读取时,我们可以使用MySQL所有者始终读取的压力。原则是所有写作操作都在主库上,阅读操作在库上,当然,主库也可以承受读取请求,并通过主库复制来自库的数据。MySQL附带复制主复制函数的功能。下面如下

  复制中流台的步骤:

  打开MASTER的二进制文件日志文件,MySQL将在BinaryLog日志文件中写入所有DDL,DML和TCL,以生成日志转储线程以从库I/O。/O。/O。请求主库的BINLOG,然后将获得的Binlog日志写入RelayLog中库的SQL线程。操作是一致的,最终数据是一致的,运河的原理是将Slave从Binlog伪装成复制SQL语句或数据。

  当然,运河专门设计了客户服务器模式。交互式协议使用Protobuf 3.0。客户可以使用不同的语言实现不同的消费者逻辑

  运河Java客户端:https://github.com/alibaba/canal/wiki/clientedxample

  作为MySQL Binlog增量采集和解析工具,运河可以交付到MQ系统,例如KAFKA/ROCKETMQ。您可以使用MQ的多语言功能。因此,我们可以使用以下方案同时同步数据

  过程解释

  在MySQL安装目录中找到my.ini配置文件,以MySQL 5.5为例,在MySQLD下进行以下配置

  修改后,重新启动MySQL Service.NOTE:我指定需要在此处为CanaldB同步的数据库,因此您需要创建数据库并创建一个员工表作为演示。

  然后创建一个用户提供运河以链接mysql以进行数据同步

  转到官方网站下载运河:https://github.com/alibaba/canal/releases。

  下载后,解压缩,目录结构如下

  接下来修改实例配置文件:conf/example/instance.properties

  在这里注意如下,不要关心其他人

  master.address:mySQL地址,我的端口是3307,默认值为3306 dbusername:mysql用户dbpassword:password canal.mq.topic =示例:数据同步到MQ的名称,然后修改运算式配置文件CONF/.CANAL。。特性

  您需要在这里注意2件事

  Canal.ServerMode = RocketMQ:我使用RocketMQ作为示例Rocketmq.namesrv.Addr = 127.0.0.0.1:9876:在配置为RocketMq地址之后,请在Canal Anstallation Directory。instup。instup。:instup。instup。:instup。sh

  对于RocketMQ尚未使用的儿童鞋,您可以观看我的“ RocketMQ极简主义”。启动运河和RocketMQ后,尝试将数据添加到员工表中,观察MQ控制台是否具有数据同步,访问http:// localhost:8080/#/消息如下

  单击消息详细信息如下

  数据以JSON格式存储至MQ。在这里,您可以看到哪个数据库,哪个表,数据内容和旧数据。在此处注意,我们需要以后封装对象

  接下来,您需要编写一个Java程序来消耗MQ中的消息,以同步,创建项目,导入依赖性

  写YML配置MQ和Redis

  编辑身体类封装在MQ中的事实。注意:根据包装封装以下canalsyndto对象。您可以将数据复制到在线JSON转换工具中进行分析。

  编写MQ消费者代码,将MQ消息封装到CanalsSyndto对象中,然后获取数据数据,然后基于SQL类型设置数据同步(插入,DELETE,UPDATE)。

  代码在这里完成。启动Springboot程序,修改或删除员工表中的数据,并观察REDIS中的数据更改:REDIS将始终随MySQL变化。

  原始:https://juejin.cn/post/7098530664701493256