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

夜间正能量不良网站网站优化 seo和sem

夜间正能量不良网站,网站优化 seo和sem,运城推广型网站开发,华为虚拟主机目录 1. 环境准备 1.1 MySQL配置 1.2 部署Canal Server 2. Spring Boot项目配置 2.1 添加依赖 2.2 配置参数 3. 实现Canal监听与同步 3.1 Canal客户端监听 3.2 同步到Redis 3.3 同步到Elasticsearch 4. 注意事项 在Spring Boot中通过Canal监听MySQL数据库变更并同步…

目录

1. 环境准备

1.1 MySQL配置

1.2 部署Canal Server

2. Spring Boot项目配置

2.1 添加依赖

2.2 配置参数

3. 实现Canal监听与同步

3.1 Canal客户端监听

3.2 同步到Redis

3.3 同步到Elasticsearch

4. 注意事项


在Spring Boot中通过Canal监听MySQL数据库变更并同步更新Redis和Elasticsearch,可按照以下步骤实现:


1. 环境准备

1.1 MySQL配置
  • 开启Binlog并设置为ROW模式:
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server-id=1
  • 创建Canal用户并授权:
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
1.2 部署Canal Server
  1. 下载Canal Server:Canal Releases
  2. 修改配置 conf/example/instance.properties
canal.instance.master.address=127.0.0.1:3306 
canal.instance.dbUsername=canal 
canal.instance.dbPassword=canal 
canal.instance.filter.regex=.*\\..*  # 监听所有库表,或指定如test.user

2. Spring Boot项目配置

2.1 添加依赖
<!-- Canal客户端 -->
<dependency><groupId>com.alibaba.otter</groupId> <artifactId>canal.client</artifactId> <version>1.1.6</version>
</dependency>
<!-- Redis -->
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Elasticsearch -->
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2.2 配置参数

application.yml

canal:server: 127.0.0.1:11111destination: exampleusername: canalpassword: canalspring:redis:host: localhostport: 6379data:elasticsearch:cluster-nodes: localhost:9200

3. 实现Canal监听与同步

3.1 Canal客户端监听
@Component
public class CanalListener {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Autowiredprivate ElasticsearchRestTemplate esTemplate;@PostConstructpublic void init() {CanalConnector connector = CanalConnectors.newSingleConnector( new InetSocketAddress("127.0.0.1", 11111), "example", "canal", "canal");Thread thread = new Thread(() -> {connector.connect(); connector.subscribe(".*\\..*"); while (true) {Message message = connector.getWithoutAck(100); long batchId = message.getId(); if (batchId != -1) {processEntry(message.getEntries()); connector.ack(batchId); }}});thread.start(); }private void processEntry(List<Entry> entries) {for (Entry entry : entries) {if (entry.getEntryType()  == EntryType.ROWDATA) {RowChange rowChange = RowChange.parseFrom(entry.getStoreValue()); for (RowData rowData : rowChange.getRowDatasList())  {String tableName = entry.getHeader().getTableName(); EventType eventType = rowChange.getEventType(); // 解析变更前后的数据Map<String, String> before = parseColumns(rowData.getBeforeColumnsList()); Map<String, String> after = parseColumns(rowData.getAfterColumnsList()); // 根据事件类型同步数据switch (eventType) {case INSERT:case UPDATE:syncToRedis(tableName, after);syncToElasticsearch(tableName, after);break;case DELETE:deleteFromRedis(tableName, before);deleteFromElasticsearch(tableName, before);break;}}}}}private Map<String, String> parseColumns(List<Column> columns) {return columns.stream() .collect(Collectors.toMap(Column::getName,  Column::getValue));}
}
3.2 同步到Redis
private void syncToRedis(String tableName, Map<String, String> data) {String key = tableName + ":" + data.get("id");  // 假设主键为idredisTemplate.opsForValue().set(key,  data);
}private void deleteFromRedis(String tableName, Map<String, String> data) {String key = tableName + ":" + data.get("id"); redisTemplate.delete(key); 
}
3.3 同步到Elasticsearch
private void syncToElasticsearch(String tableName, Map<String, String> data) {IndexQuery indexQuery = new IndexQueryBuilder().withId(data.get("id")) .withObject(data).build();esTemplate.index(indexQuery,  IndexCoordinates.of(tableName)); 
}private void deleteFromElasticsearch(String tableName, Map<String, String> data) {esTemplate.delete(data.get("id"),  IndexCoordinates.of(tableName)); 
}

4. 注意事项

  1. 异常处理:增加重试机制或记录错误日志,确保网络波动时的数据一致性。
  2. 性能优化:批量处理Canal消息,减少Redis/ES的频繁写入。
  3. 数据结构:确保Elasticsearch的索引Mapping与MySQL表结构兼容。
  4. 事务管理:如需强一致性,可结合本地事务表或消息队列(如RocketMQ)做可靠投递。

通过以上步骤,Spring Boot应用能够实时监听MySQL变更,并自动同步到Redis和Elasticsearch,保障数据一致性。

http://www.dtcms.com/wzjs/246228.html

相关文章:

  • 2核4g 1m做网站乔拓云建站平台
  • wordpress美国空间上海谷歌seo公司
  • 以前做视频的网站吗营销策略ppt模板
  • 用手机可以做网站嘛上海网站推广服务
  • 商丘网站建设设计营销方案怎么写?
  • 解决设计网站问题百度排名点击软件
  • 深圳企业网站制作平台醴陵网站制作
  • wordpress如何修改布局排名seo怎么样
  • 物流管理网站怎么做google ads
  • 网站安全建设目的互动营销的案例及分析
  • 霸州网站建设关联词有哪些关系
  • 网站开发证书乱码链接怎么用
  • 网站的备案all成都网站优化seo
  • 珠海网站建设制作设计张家口网站seo
  • 网站平台做期货什么是seo技术
  • 专业网站制作哪便宜免费二级域名查询网站
  • 安徽网站建站系统哪家好建网站赚钱
  • 重庆科技建设优化系统软件
  • 邯郸鑫芭网络科技有限公司福建seo顾问
  • 在国内做博彩网站代理苏州seo关键词优化价格
  • 做外包的网站有哪些问题南京seo关键词优化预订
  • 上海做网站的公司哪个好蒙牛牛奶推广软文
  • 阳江网站建设推广公司电话企业全网推广公司
  • 免费在线观看电影厦门seo关键词排名
  • 东莞模板建站平台百度经验首页
  • 合肥哪里有做网站台州百度推广优化
  • 帮网站做推广赚钱吗怎样和政府交换友链
  • 什么是网站的功能模块微信推广引流方法
  • 竞价页面网站做优化网络营销有哪些方式
  • 导航网站怎么做seo全媒体运营师报考官网在哪里