一、 实时同步
- 要求强一致性
- 先查询缓,若存查询不到,再查DB,然后保存到缓存
- 更新缓存时,先更新数据库,再将缓存的设置过期(建议不要去更新缓存内容,直接设置缓存过期)
二、 异步队列
简介
对于并发程度较高的,可采用异步队列的方式同步数据,可采用kafka、RicketMQ等消息中间件处理消息生产和消费
kafka优点
- 数据放在了硬盘上,对硬盘进行了顺序IO流存址,所以读取效率高
kafka作用
- 异步数据同步
- 流量削峰:如同时给1W人打款,服务器压力大,可进行异步操作,设置异步队列,然后定时,在服务器空闲的时候一个一个进行打款操作
- 数据放在硬盘上,而不是内存中,保证消息队列的数据不丢失

三、 阿里的同步工具canal
简介
canal实现方式是模拟mysql slave和master的同步机制,监控DB bitlog的日志更新来触发缓存的更新,此种方法可以解放程序员双手,减少工作量,但在使用时有些局限性。
Mysql主从复制原理简析

- 该模型有两种服务器:例如,master服务器专门用于数据的增删改,slave服务器(1个或多个)专门用于数据查询
- 如何保证两种服务器数据的一致性?
- master服务器将操作中的改变记录存放到二进制日志文件中(binary log),这些记录叫做二进制日志事件(binary log events),我们可以通过show binlog events命令进行查看。
- Slave服务器会通过IO线程去读取binary log文件中信息并复制到自己的relay log(中继日志)日志文件中。
- Slave服务器在通过开启SQL线程定时读取检查relay log,一旦发现有修改,就立即重新加载relay log文件中的信息,然后执行文件中的修改记录,并反映到自己的服务器中。
canal原理简析

- canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
- mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal解析binary log对象(原始为byte流)
四、 用UDF自定义函数的方式
面对mysql的API进行编程,利用触发器进行缓存同步,但UDF主要是c/c++语言实现,学习成本高。
PS:
- 文章来自各种资源的整理,如有侵权请告知删除。
- 转载本文请注明出处