保证一致性的做法就是用某种分布式协议一致性来做:
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。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)