2020-05-16:如何保证redis和mysql数据一致?

2020-05-16:如何保证redis和mysql数据一致?,第1张

保证一致性的做法就是用某种分布式协议一致性来做:

1、SAGA或者TCC - 这两种需要业务代码的大量配合。通过业务代码来补偿一致性。

2、 现实当中有XA协议。比如Ehcache是支持XA协议的。但是性能表现不佳,运维也麻烦。

3、基于Paxos或者Raft的分布式锁,然后对Redis和DB进行双写

mysql 与Redis 数据一致性问题 直接将Redis清空

中间件 canal框架 基于 docker环境构建

canal 框架 原理:

<u>https://gitee.com/mirrors/canal?utm_source=alading&utm_campaign=repo</u>

canal 框架原理

1,canal伪装成mysql从节点 订阅mysql 主节点的binlog文件

2,当我们的mysql 主节点 binlog 文件发生了变化,则将binlog 文件发送给canal服务器端

3,canal 服务器端将该binlog 文件二进制转换成json格式给canal客户端

4,canal客户端在将改数据同步到Redis/ES

基于Binlog 开启方式

1.mysql 开启binlog 文件配置

windows 配置

查询 my.ini配置文件位置

C:\ProgramData\MySQL\MySQL Server 5.7

2, linux mysql

安装canal

进入容器

编辑配置文件

重启canal

Docker-compose 构建canal

canal.instance.mysql.slaveId:slaveId不能与mysql的serverId一样

canal.instance.master.address:mysql地址

canal.instance.dbUsername:mysql账号

canal.instance.dbPassword:mysql密码

如果要“保证”数据的安全性,那么会带来开销的进一步提升,以至于使用redis带来的性能优势都会丧失。正确的做法是区分不同的业务,使得并不需要“保证”数据一致性的场合,可以使用redis优化。而敏感的场合依然使用mysql。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9933272.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存