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

MySQL与Canal、RabbitMQ集成指南

MySQL 部分

1. 查看是否开启 binlog

MySQL 8 默认开启 binlog。可以通过以下命令查看是否开启:

SHOW VARIABLES LIKE 'log_bin';

如果返回结果为 ON,则表示 binlog 已开启。

Variable_nameValue
log_binON

2. 若未开启 binlog,则需手动配置

如果 binlog 未开启,需要在 MySQL 配置文件中添加以下配置:

log-bin=mysql-bin  # 开启 binlog
server_id=1        # 配置 MySQL replication 需要定义,确保不与 Canal 的 slaveId 重复

修改完成后,重启 MySQL 使配置生效。

3. 创建 Canal 使用的 MySQL 用户

Canal 需要连接到 MySQL 并读取 binlog,因此需要创建一个专门的用户并授予相应权限。

# 创建用户
CREATE USER canal IDENTIFIED WITH mysql_native_password BY 'canal';# 授予权限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';# 刷新权限
FLUSH PRIVILEGES;

MQ 部分

在 RabbitMQ 中,我们需要创建一个交换机和队列,并将它们绑定在一起。我使用的是已经创建过的 Virtual Host : trovebox_dev,你可以根据实际情况决定是否创建新的 Virtual Host。

1. 新建交换机

在 RabbitMQ 管理界面中,创建一个新的交换机,命名为 canal.exchange

新建交换机

2. 添加队列

创建一个新的队列,命名为 canal.queue

添加队列

3. 绑定交换机

将队列 canal.queue 绑定到交换机 canal.exchange,并设置路由键为 canal.routing.key

绑定交换机

绑定交换机

Canal 部分

Docker 安装 Canal

使用 Docker 安装 Canal 非常简单,以下是安装步骤:

  1. 拉取 Canal 镜像:没有tag默认最新的

    docker pull canal/canal-server
    
  2. 运行 Canal 容器:

    docker run -p 11111:11111 -p 11110:11110 -p 11112:11112 \--name canal \-e canal.destinations=destination \-e canal.instance.master.address=ip:port \-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=dataBaseName\\..* \-d canal/canal-server:latest
    
  3. 将 Canal 的配置文件和日志文件拷贝到宿主机:

    docker cp containerId:/home/admin/canal-server/conf /www/dk_project/dk_app/canal/
    docker cp containerId:/home/admin/canal-server/logs /www/dk_project/dk_app/canal/
    
  4. 修改配置文件 conf/canal.properties

    canal.serverMode = rabbitMQ
    rabbitmq.host = ip
    rabbitmq.virtual.host = trovebox_dev
    rabbitmq.exchange = canal.exchange
    rabbitmq.username = trovebox_dev
    rabbitmq.password = troveboxadmin
    
  5. 修改配置文件 conf/destination/canal.properties

    canal.instance.dbUsername=canal
    canal.instance.dbPassword=canal
    canal.mq.topic=canal.routing.key
    
  6. 删除并重新创建 Canal 容器:

    docker rm -f canaldocker run -p 11111:11111 -p 11110:11110 -p 11112:11112 \--name canal \-e canal.destinations=destination \-e canal.instance.master.address=ip:port \-e canal.instance.dbUsername=canal \-e canal.instance.dbPassword=canal \-e canal.instance.connectionCharset=UTF-8 \-e canal.instance.tsdb.enable=true \-v /www/dk_project/dk_app/canal/conf:/home/admin/canal-server/conf/ \-v /home/admin/canal-server/logs:/home/admin/canal-server/logs/ \-e canal.instance.filter.regex=dataBaseName\\..* \-d canal/canal-server:latest
    

Java 部分代码

BinLogDto.java

BinLogDto 类用于解析 Canal 发送的 binlog 数据。

package online.trovebox.ruyiai.common.dto;import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import lombok.Data;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Data
public class BinLogDto {private String database;  // 数据库private String table;     // 表private String type;      // 操作类型private JSONArray data;   // 操作数据private JSONArray old;    // 变更前数据private JSONArray pkNames; // 主键名称private String sql;       // 执行 SQL 语句private Long es;private String gtid;private Long id;private Boolean isDdl;private JSONObject mysqlType;private JSONObject sqlType;private Long ts;public <T> List<T> getData(Class<T> clazz) {if (this.data == null || this.data.size() == 0) {return null;}return this.data.toList(clazz);}public <T> List<T> getOld(Class<T> clazz) {if (this.old == null || this.old.size() == 0) {return null;}return this.old.toList(clazz);}public List<String> getPkNames() {if (this.pkNames == null || this.pkNames.size() == 0) {return null;}List<String> pkNames = new ArrayList<>();for (Object pkName : this.pkNames) {pkNames.add(pkName.toString());}return pkNames;}public Map<String, String> getMysqlType() {if (this.mysqlType == null) {return null;}Map<String, String> mysqlTypeMap = new HashMap<>();this.mysqlType.forEach((k, v) -> {mysqlTypeMap.put(k, v.toString());});return mysqlTypeMap;}public Map<String, Integer> getSqlType() {if (this.sqlType == null) {return null;}Map<String, Integer> sqlTypeMap = new HashMap<>();this.sqlType.forEach((k, v) -> {sqlTypeMap.put(k, Integer.valueOf(v.toString()));});return sqlTypeMap;}
}

Listener.java

Listener 类用于监听 RabbitMQ 中的消息,并处理 binlog 数据。

package online.trovebox.ruyiai.listener;import com.alibaba.fastjson2.JSON;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import online.trovebox.ruyiai.common.dto.BinLogDto;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import java.util.Set;@Component
@Slf4j
@RequiredArgsConstructor
public class CanalListener {@Resourceprivate RedisTemplate<String, Object> redisTemplate;String[] prefixes = new String[]{"coin_change_log","log","message",};@RabbitListener(bindings = {@QueueBinding(value = @Queue(value = "canal.queue", durable = "true"),exchange = @Exchange(value = "canal.exchange"),key = "canal.routing.key")})public void handleDataChange(@Payload Message message) {String content = new String(message.getBody(), StandardCharsets.UTF_8);BinLogDto binLog = JSON.parseObject(content, BinLogDto.class);String type = binLog.getType();if (type.equalsIgnoreCase("select")) {return;}String table = binLog.getTable();for (String prefix : prefixes) {if (table.startsWith(prefix)) {System.err.println(table);return;}}log.info("表:{} 操作类型:{}", table, binLog.getType());log.info("操作后数据:{} ", binLog.getData().toStringPretty());deleteKeysStartingWith(table);}public void deleteKeysStartingWith(String prefix) {String cursor = "0";do {Set<String> keys = scanKeys(cursor, prefix);cursor = keys.isEmpty() ? "0" : "1";if (!keys.isEmpty()) {redisTemplate.delete(keys);}} while (!"0".equals(cursor));}private Set<String> scanKeys(String cursor, String prefix) {return redisTemplate.execute((RedisCallback<Set<String>>) connection -> {ScanOptions options = ScanOptions.scanOptions().match(prefix + "*").count(1000).build();Cursor<byte[]> cursorScan = connection.scan(options);Set<String> keys = new HashSet<>();while (cursorScan.hasNext()) {byte[] keyBytes = cursorScan.next();keys.add(new String(keyBytes, StandardCharsets.UTF_8));}return keys;});}
}

效果图

效果图

知识点说明

  1. Binlog:MySQL 的二进制日志,用于记录数据库的所有更改操作。Canal 通过读取 binlog 来获取数据库的变更数据。
  2. Canal:阿里巴巴开源的数据库同步工具,基于 MySQL 的 binlog 实现数据同步。
  3. RabbitMQ:消息队列中间件,用于在分布式系统中传递消息。Canal 可以将 binlog 数据发送到 RabbitMQ,供其他服务消费。
  4. Redis:内存数据库,用于缓存数据。在监听 binlog 变更时,可以通过 Redis 缓存相关数据,并在数据变更时清除缓存。

通过以上步骤和代码,你可以实现 MySQL 数据库的变更监听,并将变更数据通过 RabbitMQ 发送到其他服务进行处理。

相关文章:

MySQL与Canal、RabbitMQ集成指南

MySQL 部分 1. 查看是否开启 binlog MySQL 8 默认开启 binlog。可以通过以下命令查看是否开启&#xff1a; SHOW VARIABLES LIKE log_bin;如果返回结果为 ON&#xff0c;则表示 binlog 已开启。 Variable_nameValuelog_binON 2. 若未开启 binlog&#xff0c;则需手动配置 …...

新品发布|启英泰伦联合启明云端推出离在线语音大模型方案

当前&#xff0c;生成式大模型正以颠覆性姿态重塑人机交互的边界&#xff0c;并逐渐向终端场景渗透。然而&#xff0c;云端大模型在落地终端场景时面临两大挑战&#xff1a; 在真实噪声场景下容易听不清、误识别&#xff0c;影响交互准确性&#xff1b;云端处理冗余数据及大规…...

网编高级 day01

网编高级 day01 0. 大纲1. Modbus协议1.1. Modbus起源1.2. 分类1.3. Modbus TCP特点 2. Modbus TCP协议格式2.1. 报文头2.2. 寄存器2.3. 功能码 0. 大纲 协议&#xff1a; modbus协议&#xff1a;modbus TCP、modbus RTUhtml 网页&#xff1a;http协议Webserver 工具&#x…...

2001-2023年上市公司数字化转型年报词频统计(年报词频统计和MDA词频统计两种方式)(吴非、赵宸宇、甄红线300+关键词三种方法)

2001-2023年上市公司数字化转型年报词频统计&#xff08;年报词频统计和MD&A词频统计两种方式&#xff09;&#xff08;吴非、赵宸宇、甄红线300关键词三种方法&#xff09; 1、时间&#xff1a;2001-2023年 2、来源&#xff1a;上市公司年报 3、参考文献&#xff1a; …...

数据分析与AI丨AI Fabric:数据和人工智能架构的未来

AI Fabric 架构是模块化、可扩展且面向未来的&#xff0c;是现代商业环境中企业实现卓越的关键。 在当今商业环境中&#xff0c;数据分析和人工智能领域发展可谓日新月异。几乎每天都有新兴技术诞生&#xff0c;新的应用场景不断涌现&#xff0c;前沿探索持续拓展。可遗憾的是&…...

MQ消息发送不在MySQL事务中,该如何保证一致性?

在 MQ 消息发送与 MySQL 事务分离的场景下&#xff0c;可通过以下方案保障数据一致性&#xff1a; 一、核心原则 确保 业务操作成功 与 消息发送成功 的最终一致性&#xff0c;避免因网络抖动、服务宕机等异常导致以下问题&#xff1a; 场景1&#xff1a;业务操作成功但消息未…...

[rust] rust学习

rust学习 1. 项目组织结构 工程 # 创建一个工程 cargo new my-project工作空间 在 Rust 中&#xff0c;工作空间&#xff08;Workspace&#xff09; 是一个包含多个 Rust 项目的共享环境&#xff0c;用于管理多个 crate&#xff08;库或可执行文件&#xff09;。它允许多个…...

艾尔登复刻Ep1——客户端制作、场景切换、网络控制

需要添加的插件内容 Netcode for GameObjects&#xff1a;是一个为 Unity 游戏开发提供高级网络功能的 SDK。它的主要作用是允许开发者在其 GameObject 和 MonoBehaviour 工作流中集成网络功能&#xff0c;并且可以与多种底层传输层协议兼容。 具体内容请看&#xff1a;https:…...

正则表达式(复习)

文章目录 一、[]: 一个字符集合二、{}: 重复次数三、特殊符号四、(): 分组五、python代码示例六、注意 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个…...

密码学笔记

密码学 一、密码学基础概念 1. CIA三要素 机密性 (Confidentiality)&#xff1a;信息不被未授权者访问。 例子&#xff1a;用钥匙锁住日记本&#xff0c;只有你有钥匙。 完整性 (Integrity)&#xff1a;信息在传输/存储中不被篡改。 例子&#xff1a;快递包裹封条&#xff0c…...

C#结构体(Struct)详解

在 C# 中&#xff0c;‌结构体&#xff08;struct&#xff09;‌ 是一种值类型数据类型&#xff0c;适用于封装小型数据组。与类&#xff08;class&#xff09;不同&#xff0c;结构体在栈&#xff08;Stack&#xff09;上分配内存&#xff0c;且赋值时会发生值复制。以下是结构…...

Tomato靶机通关攻略

1.安装并开启靶机 2.用Kali查询靶机IP Kali 的IP 靶机的IP 3.访问靶机 4.用御剑扫描端口 5.获取敏感目录 分别访问三个目录 6.查看目录 发现info.php并进入 查看源码&#xff0c;发现文件包含漏洞 利用漏洞查看日志文件 http://192.168.40.139/antibot_image/antibots/info…...

Go Ebiten小游戏开发:俄罗斯方块

在这篇文章中&#xff0c;我们将一起开发一个简单的俄罗斯方块游戏&#xff0c;使用Go语言和Ebiten游戏库。Ebiten是一个轻量级的游戏库&#xff0c;适合快速开发2D游戏。我们将逐步构建游戏的基本功能&#xff0c;包括游戏逻辑、图形绘制和用户输入处理。 项目结构 我们的项…...

Github 2025-03-12 C开源项目日报Top5

根据Github Trendings的统计,今日(2025-03-12统计)共有5个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目5C++项目1Lean的LEDE源码:为国产龙芯LOONGSON SoC loongarch64/飞腾Phytium腾锐2000系列架构添加支持 创建周期:2338 天开发语言:C协议类…...

【机器学习-基础知识】统计和贝叶斯推断

1. 概率论基本概念回顾 1. 概率分布 定义: 概率分布(Probability Distribution)指的是随机变量所有可能取值及其对应概率的集合。它描述了一个随机变量可能取的所有值以及每个值被取到的概率。 对于离散型随机变量,使用概率质量函数来描述。对于连续型随机变量,使用概率…...

Unity3D 着色器优化(Shader Optimization)

前言 Unity3D 着色器&#xff08;Shader&#xff09;优化是提升渲染性能的关键环节&#xff0c;尤其是在移动设备或复杂场景中。以下是系统的优化策略和实践建议&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经…...

基于SpringBoot的“体育购物商城”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“体育购物商城”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体模块设计 前台用户登录界面 系统首页界面…...

数据库约束

数据库约束 1. NULL约束2. UNIQUE&#xff1a;唯一约束3. DEFAULT&#xff1a;默认值约束4. PRIMARY KEY&#xff1a;主键约束5. FOREIGN KEY&#xff1a;外键约束6. CHECK约束 数据库约束是关系型数据库的一个重要功能&#xff0c;主要作用是保证数据的正确性&#xff0c;也就…...

【经典算法】Leetcode-零钱兑换问题

一、题目 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。你可以认为每种硬币的数量是无限的…...

Go 语言使用Protobuf 进行序列化详解

文章目录 Go 语言使用Protobuf 进行序列化详解1. Protobuf是什么?2. 安装Protobuf 及 Go 依赖3. 编写.proto 文件4. 实现序列化和反序列化 Go 语言使用Protobuf 进行序列化详解 1. Protobuf是什么? 以下是 Protobuf 官方中文文档的概述: Protobuf(Protocol Buffers) 是一种…...

Windows控制台函数:标准输入输出流交互函数GetStdHandle()

目录 什么是 GetStdHandle&#xff1f; 它长什么样&#xff1f; 怎么用它&#xff1f; 它跟 std::cout 有什么不一样&#xff1f; GetStdHandle 是一个 Windows API 函数&#xff0c;用于获取标准输入、标准输出或标准错误设备的句柄。它定义在 Windows 的核心头文件 <…...

自然语言处理初学者指南

文章目录 一、说明二、自然语言处理发展史2.1 最早的自然语言处理简介2.2 历史2.3 NLP 的早期工作 三、NLP的现代方法3.1 单词编码3.2 循环神经网络3.3 强化学习3.4 深度学习 四、更进一步的方法 一、说明 对于初学者来说&#xff0c;自然语言处理的发展历史非常有必要了解&am…...

Kubernetes教程(七)了解集群、标签、Pod和Deployment

了解集群、标签、Pod和Deployment 一、K8s资源对象二、K8s集群1. Master2. Node 三、Namespace&#xff08;命名空间&#xff09;四、Label&#xff08;标签&#xff09;五、Pod1. 共享网络命名空间2. 共享数据 六、工作负载1. 设置副本数2. 应用升级 结语 Kubernetes的知识真的…...

【BUG分析】微服务无法读取Nacos中的共享配置

项目场景 基于Spring Cloud微服务的商城系统。 使用Nacos进行统一配置管理&#xff0c;在bootstrap.xml中读取配置参数。 问题描述 购物车微服务可以读取Nacos中的共享mybatis配置&#xff0c;商品管理微服务却读不到&#xff0c;启动报错提示无法配置数据库源&#xff1a; …...

SpringMVC (一)基础

目录 SpringMVC 一 简单使用 1 新建模块选择指定参数 2 创建实现类 3 将项目启动 4 运行结果&#xff1a;在浏览器当中响应执行 二 RequestMapping 三 请求限定 SpringMVC SpringMVC是Spring的web模块&#xff0c;用来开发Web应用&#xff0c;SpringMVC应用最终作为B/…...

【ES6】ES6中的类

基础定义和使用 class Animal {constructor(name, species, age) {this.name namethis.species speciesthis.age age} }let dog new Animal("Spot", "Dog", 4)私有变量 变量名前带#即可。 Getter 和Setter方法 继承 // 父类 class Point{construc…...

兴达易控Profinet 转 ModbusTCP跨网段通信模块

Profinet 转 ModbusTCP/跨网段通信模块 Profinet转ModbusTCP/跨网段通信模块&#xff0c;作为现代工业自动化系统中不可或缺的重要组件&#xff0c;正日益受到广泛关注和应用。 这种模块的核心功能是将Profinet网络协议转换为Modbus TCP协议&#xff0c;实现不同网络之间的无缝…...

linux 的免密切换用户PAM配置

/etc/pam.d/su是Linux系统中与用户切换&#xff08;su命令&#xff09;相关的PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插拔认证模块&#xff09;配置文件。以下是对它的详细介绍&#xff1a; 简介 作用 PAM是一种用于管理系统认证的机制&#xff0c;…...

使用 Python pandas操作 Excel 文件

使用 Python pandas 操作 Excel 文件 flyfish pandas 是 Python 中一个强大的数据处理和分析库&#xff0c;它提供了丰富的数据结构&#xff08;如 Series 和 DataFrame&#xff09;和数据操作方法&#xff0c;能够方便地处理各种数据格式&#xff0c;包括 Excel 文件。 安装…...

UE5.5 Niagara 发射器粒子更新模块

Particle State &#xff08;粒子状态&#xff09;模块 Particle State 主要用于控制粒子的生存状态&#xff0c;包括死亡、消失、响应事件等。 Particle State Kill Particles When Lifetime Has Elapsed 当粒子的生命周期结束时&#xff0c;销毁这些粒子。 Lifetime &…...

状态模式的C++实现示例

核心思想 状态模式&#xff08;State Pattern&#xff09; 是一种行为设计模式&#xff0c;允许对象在其内部状态改变时改变其行为。它将状态相关的逻辑分散到不同的状态类中&#xff0c;避免了使用大量的条件语句来处理不同状态下的行为。 状态抽象化&#xff1a;将对象的状…...

ThinkPHP8.0+MySQL8.0搭建简单实用电子证书查询系统

客户花了100元买了一个系统&#xff0c;开始不能导入&#xff0c;到处找人帮忙解决。给解决能导入了&#xff0c;不能修改&#xff0c;满足不了用户的需求。用户一狠心&#xff0c;花200块钱&#xff0c;叫我给他定制了一个电子证书查询系统。还免费给部署到服务器。惭愧惭愧……...

STM32全系大阅兵(2)

接前一篇文章:STM32全系大阅兵(1) 本文内容参考: STM32家族系列的区别_stm32各个系列区别-CSDN博客 STM32--STM32 微控制器详解-CSDN博客...

upload-labs通关攻略 【Pass-01~Pass-19】

注意&#xff1a;GitHub中upload-labs有多个版本:19关、21关、23关。版本不同&#xff0c;关卡的顺序也很可能不同。此次例子是21关。 项目地址&#xff1a;https://github.com/c0ny1/upload-labs 一、Pass-01 【js前端检测的绕过】 1. 打开Pass-01 访问&#xff1a;ip/uploa…...

HCIP复习拓扑练习(修改版)

拓扑&#xff1a; 实际&#xff1a; 需求&#xff1a; 需求分析 1.这意味着学校内部网络能够正常解析域名并进行互联网访问。 2. PC1和PC2处于同一个内网192.168.1.0/24&#xff0c;其中PC1有权限访问外部网段3.3.3.0/24&#xff0c;而PC2没有。这涉及ACL&#xff08;访问控制…...

Zabbix 7.2 + Grafana 中文全自动安装ISO镜像

简介 ​ 基于Zabbix 官方的Alma Linux 8 作为基础镜像。 镜像源都改为国内大学镜像站&#xff0c;自动联网安装ZabbixGrafana。 安装中文字体、Zabbix和Grafana也配置默认中文。 Zabbix 也指定中文字体&#xff0c;绘图无乱码。 配置时区为东八区&#xff0c;Zabbix配置We…...

使用 Python 将 PDF 转换为文本:打造一个简单高效的提取工具

在数字化时代&#xff0c;PDF 文件是我们日常生活中常见的文档格式。无论是学术论文、工作报告还是电子书&#xff0c;PDF 的广泛使用让提取其中文字内容成为一个常见需求。手动复制粘贴显然效率低下&#xff0c;而借助 Python&#xff0c;我们可以轻松实现自动化提取。本文将介…...

scoop退回软件版本的方法

title: scoop退回软件版本的方法 date: 2025-3-11 23:53:00 tags: 其他 前言 在软件更新后&#xff0c;如果出现了很影响使用体验的问题&#xff0c;那么可以把软件先退回以前的版本进行使用&#xff0c; 但是scoop本身并没有提供直接让软件回退版本的功能&#xff0c;因此…...

网络爬虫-2:正则化

1.正则化 一.正则化 1.转义字符 转义字符含义\s空白字符&#xff08;空格、制表符等&#xff09;\d数字字符&#xff08;0-9&#xff09;\w字母、数字或下划线.除换行符外的任意字符\n换行符\t制表符 import re result re.findall(r\s, Hello World\nPython) print(result)…...

emacs使用mongosh的方便工具发布

github项目地址: GitHub - csfreebird/emacs_mongosh: 在emacs中使用mongosh快速登录mongodb数据库 * 用途 在emacs中使用mongosh快速登录mongodb数据库&#xff0c; 操作方法: M-x mongosh, 输入数据库名称&#xff0c;然后就可以自动登录&#xff0c;前提是你已经配置好了…...

【Spring】详细剖析Spring程序

文章目录 一、Spring概述1. Spring简介1.1 OCP开闭原则1.2 依赖倒置原则DIP1.3 控制反转IoC 2. Spring8大模块 二、Spring的入门程序1. Spring官网2. 第一个Spring程序2.1 创建工程2.2 配置 pom.xml&#xff1a;2.3 定义bean&#xff1a;User . java2.4 配置文件 spring.xml2.5…...

《MySQL数据库从零搭建到高效管理|库的基本操作》

目录 一、数据库的操作 1.1 展示数据库 1.2 创建数据库 1.3 使用数据库 1.4 查看当前数据库 1.5 删除数据库 1.6 小结 二、常用数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 一、数据库的操作 打开MySQL命令行客户端&#xff0c;安装完MySQL后会有两个客户端…...

docker部署jenkins,安装使用一条龙教程

Jenkins k8s 实现CI/CD 一、简介 1. JenKins是什么? Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 2. 什么是CI / CD…...

图像识别技术与应用-YOLO

1 YOLO-V1 YOLO-V1它是经典的one-stage方法&#xff0c;You Only Look Once&#xff0c;名字就已经说明了一切&#xff01;把检测问题转化成回归问题&#xff0c;一个CNN就搞定了&#xff01;也可以对视频进行实时检测&#xff0c;应用领域非常广&#xff01; YOLO-V1诞生与2…...

【网络通信安全】子专栏链接及简介

目录 操作系统安全&#xff1a;筑牢网络安全根基​ 网络协议安全&#xff1a;守护数据传输通道​ Web 站点安全开发&#xff1a;打造安全的网络交互平台​ 在数字化浪潮席卷的当下&#xff0c;网络通信已深度融入生活与工作的方方面面&#xff0c;从日常的线上购物、社交互动…...

Oracle比较好的几本书籍

1.《Oracle专家高级编程》 2.《Oracle高效设计》 3.《Oracle9i&10g&11g编程艺术深入数据库体系结构》 4.《让Oracle跑的更快》(1/2) ....... n.《Oracle官方文档的阅读》下面包括这几个部分&#xff0c;可以跟进研读一下&#xff1a; &#xff08;1&#xff09;《…...

忘记dedecms后台超级管理员账号和密码的解决方案

解决方案&#xff1a; 方案一、数据库修改&#xff1a; 1、前提是您能登录到数据库后台&#xff0c;登录MySQL数据库管理工具&#xff08;如phpMyAdmin&#xff09; 2、打开数据库中的 dede_admin 表&#xff0c;找到管理员记录&#xff0c;将 pwd 字段的值改成 f297a57a5a7…...

处理动态分页:自动翻页与增量数据抓取策略-数据议事厅

一、案例场景 Lily&#xff08;挥舞着数据报表&#xff09;&#xff1a;“用户反馈我们的股票舆情分析总是缺失最新跟帖&#xff01;这些动态分页像狡猾的狐狸&#xff0c;每次抓取都漏掉关键数据&#xff01;” 小王&#xff08;调试着爬虫代码&#xff09;&#xff1a;“传…...

微服务新手入门

一、微服务概念 微服务是一种软件架构风格&#xff0c;ta是以专注于单一职责的很多小型项目为基础&#xff0c;组合出复杂的大型应用。 微服务 - 服务拆分 - 远程调用 - 服务治理 - 请求路由 - 身份认证 - 配置管理 - 服务保护 - 分布式事务 - 异步通信 - 消息可靠性 - 延迟消…...

antd浏览器引入的问题

1&#xff0c;在使用ant design vue的4.1.2版本通过浏览器引入的方式遇到的问题&#xff0c;遇到的问题&#xff08;不确定其他版本有没有问题&#xff09;&#xff0c;通过在页面使用下面的代码 <a-modal v-model:open"apiOpen" title"修改秘钥" ok&q…...