Redis与Mysql数据双写一致性
1、 复习+面试题
先动Mysql,再动Redis,两害相衡取其轻,避免Redis业务key突然消失,多线程请求集火打满mysql
动,写操作,先更新数据库,在删除缓存。回写的时候使用双检加锁机制锁住mysql,只让一个线程回写Redis,完成数据一致性
面试题
我想MySQL有记录改动了(增删改写操作),立刻同步反应到Redis,该怎么做?
你怎么知道MySQL有改动?
2、canal
是什么?
主要用途是用于MySQL数据库增量日志数据的订阅、消费和解析,是阿里巴巴开发并开源的,采用Java语言开发
传统给MySQL主从复制工作原理
● 当master主服务器上的数据发生改变时,将其改变写入二进制事件日志文件中;
● slave从服务器会在一定时间间隔内对master主服务器上的二进制日志进行探测,探测其是否发生过改变,如果探测到master主服务器的二进制事件日志发生了改变,则开始一个I/O Thread请求master二进制事件日志
● 同时master主服务器为每个I/O Thread启动一个dump Thread,用于向其发送二进制事件日志;
● slave从服务器将接收到的二进制事件日志保存至自己本地的中断日志文件中;
● slave从服务器将启动SQL Thread从中断日志中读取二进制日志,在本地重放,使得其数据和主服务器保持一致;
canal工作原理
● canal模拟MySQl slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议
● MySQL master 收到dump请求,开始推送binary log给slave
● canal解析binary log对象(原始byte流)