面试官:说说MySQL数据如何同步到Redis缓存?
大彬:嗯,有两种方案:
- 通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现。过程大致如下:
- 在MySQL中对要操作的数据设置触发器Trigger,监听操作
- 客户端向MySQL中写入数据时,触发器会被触发,触发之后调用MySQL的UDF函数
- UDF函数可以把数据写入到Redis中,从而达到同步的效果
- 解析MySQL的binlog实现,将数据库中的数据同步到Redis。可以通过canal实现。
canal是阿里巴巴旗下的一款开源项目,基于数据库增量日志解析,提供增量数据订阅&消费。
-面试官:那你知道canal的原理吗?
-大彬:
- canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
- mysql master收到dump请求,开始推送binary log给canal
- canal解析binary log对象(原始为byte流),将数据同步写入Redis。
-面试官:嗯,回去等通知吧