当前位置: 首页 > news >正文

(多级缓存)缓存同步

对应的教程视频:

高级篇Day4-04-缓存同步_哔哩哔哩_bilibili

一、数据同步策略

缓存数据同步的常见方式有三种:

设置有效期 :给缓存设置有效期,到期后自动删除。再次查询时更新
优势:简单、方便
缺点:时效性差,缓存过期之前可能不一致
场景:更新频率较低,时效性要求低的业务
同步双写 :在修改数据库的同时,直接修改缓存
优势:时效性强,缓存与数据库强一致
缺点:有代码侵入,耦合度高;
场景:对一致性、时效性要求较高的缓存数据
异步通知: 修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据
优势:低耦合,可以同时通知多个缓存服务
缺点:时效性一般,可能存在中间不一致状态
场景:时效性要求一般,有多个服务需要同步

 

 

 

二、安装和配置Canal

 

 

下面我们就开启mysql的主从同步机制,让Canal来模拟salve

1.开启MySQL主从

Canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主从功能才可以。

这里以之前用Docker运行的mysql为例:

1.1.开启binlog

打开mysql容器挂载的日志文件,我的在/tmp/mysql/conf目录:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7I8WMYyf-1662205186188)(assets/image-20210813153241537.png)]

修改文件:

vi /tmp/mysql/conf/my.cnf

添加内容:

log-bin=/var/lib/mysql/mysql-bin
binlog-do-db=heima

配置解读:

  • log-bin=/var/lib/mysql/mysql-bin:设置binary log文件的存放地址和文件名,叫做mysql-bin
  • binlog-do-db=heima:指定对哪个database记录binary log events,这里记录heima这个库

最终效果:

[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
log-bin=/var/lib/mysql/mysql-bin
binlog-do-db=heima

1.2.设置用户权限

接下来添加一个仅用于数据同步的账户,出于安全考虑,这里仅提供对heima这个库的操作权限。

create user canal@'%' IDENTIFIED by 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%' identified by 'canal';
FLUSH PRIVILEGES;

重启mysql容器即可

docker restart mysql

测试设置是否成功:在mysql控制台,或者Navicat中,输入命令:

show master status;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WvOrHLy5-1662205186193)(assets/image-20200327094735948.png)]

2.安装Canal

2.1.创建网络

我们需要创建一个网络,将MySQL、Canal、MQ放到同一个Docker网络中:

docker network create heima

让mysql加入这个网络:

docker network connect heima mysql

2.3.安装Canal

课前资料中提供了canal的镜像压缩包:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvuASqcG-1662205186198)(assets/image-20210813161804292.png)]

大家可以上传到虚拟机,然后通过命令导入:

docker load -i canal.tar

然后运行命令创建Canal容器:

docker run -p 11111:11111 --name canal \
-e canal.destinations=heima \
-e canal.instance.master.address=mysql:3306  \
-e canal.instance.dbUsername=canal  \
-e canal.instance.dbPassword=canal  \
-e canal.instance.connectionCharset=UTF-8 \
-e canal.instance.tsdb.enable=true \
-e canal.instance.gtidon=false  \
-e canal.instance.filter.regex=heima\\..* \
--network heima \
-d canal/canal-server:v1.1.5

说明:

  • -p 11111:11111:这是canal的默认监听端口
  • -e canal.instance.master.address=mysql:3306:数据库地址和端口,如果不知道mysql容器地址,可以通过docker inspect 容器id来查看
  • -e canal.instance.dbUsername=canal:数据库用户名
  • -e canal.instance.dbPassword=canal :数据库密码
  • -e canal.instance.filter.regex=:要监听的表名称

表名称监听支持的语法:

mysql 数据解析关注的表,Perl正则表达式.
多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 
常见例子:
1.  所有表:.*   or  .*\\..*
2.  canal schema下所有表: canal\\..*
3.  canal下的以canal打头的表:canal\\.canal.*
4.  canal schema下的一张表:canal.test1
5.  多个规则组合使用然后以逗号隔开:canal\\..*,mysql.test1,mysql.test2 

 三、监听Canal 

 Canal提供了各种语言的客户端,当Canal监听到binlog变化时,会通知Canal的客户端。不过这里我们会使用GitHub上的第三方开源的canal-starter。地址:GitHub - NormanGyllenhaal/canal-client: spring boot canal starter 易用的canal 客户端 canal client

 

 

 

 

相关文章:

  • vue2入门--->非单文件组件(html直接使用组件)
  • 【CSS】伪元素和伪类选择器区别
  • C++ 正则表达式(匹配、搜索、替换)
  • 2.C#:lenson2_TextBox
  • 神经网络编程的34个案例,神经网络编程是什么
  • 链接生成-链接生成器-免费批量在线链接生成器
  • springboot+vue3+elementui plus汽车租赁网站源码
  • java中类中代码的执行顺序,附简繁两个Demo
  • 数据中心设计方案 实例,数据中心网络设计方案
  • 算法笔记(四)从暴力递归到动态规划
  • golang设计模式——行为模式
  • springboot版HelloWorld
  • 在portacle中获取EMACS Lisp帮助文档的方法(Win11)
  • 线性代数学习笔记8-1:复数矩阵与Hermite矩阵、酉矩阵、傅里叶矩阵和快速傅里叶变换FFT
  • java ssm创意设计分享系统
  • 深入了解以太坊
  • CSS相对定位
  • Java超时控制的实现
  • Java教程_软件开发基础
  • js如何打印object对象
  • MySQL-事务管理(基础)
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Object.assign方法不能实现深复制
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis字符串类型内部编码剖析
  • underscore源码剖析之整体架构
  • Yeoman_Bower_Grunt
  • 关于extract.autodesk.io的一些说明
  • 解决iview多表头动态更改列元素发生的错误
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何设计一个比特币钱包服务
  • 思考 CSS 架构
  • 正则表达式小结
  • PostgreSQL之连接数修改
  • #QT(TCP网络编程-服务端)
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (蓝桥杯每日一题)love
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .NET MVC 验证码
  • .NET正则基础之——正则委托
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [20150904]exp slow.txt
  • [Bugku]密码???[writeup]
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C#7] 1.Tuples(元组)
  • [CF226E]Noble Knight's Path
  • [Foreman]解决Unable to find internal system admin account
  • [Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云
  • [iOS]-UIKit
  • [leetcode] 61. 旋转链表
  • [MFC] VS2013版本MFC工程移植到VC6.0上