Docker--利用dockerfile搭建mysql主从集群和redis集群

news2025/4/13 5:40:18

Docker镜像制作的命令 链接

Docker 镜像制作的注意事项 链接

搭建mysql主从集群

mysql主从同步的原理

MySQL主从同步(Replication)是一种实现数据冗余和高可用性的技术,通过将主数据库(Master)的变更操作同步到一个或多个从数据库(Slave),实现数据的实时或准实时复制

为什么要用主从分离?

  • 读写分离,提高性能:主库负责写,从库负责读

  • 数据实时备份:主库的数据实时存储到从库

  • 高可用HA:当有一个节点发生故障时,可以随时切换

核心流程

主库记录变更日志(Binary Log)

  • 主库将所有数据变更操作(如INSERT、UPDATE、DELETE)记录到二进制日志(Binary Log)中。
  • Binary Log是二进制格式的文件,记录了每个事务的SQL语句或行级变更。

从库读取主库的日志

  • 从库通过I/O线程连接到主库,并请求读取Binary Log。
  • 主库的I/O线程将Binary Log的内容发送给从库。

从库重放日志(Relay Log)

  • 从库将接收到的Binary Log写入本地的中继日志(Relay Log)。
  • 从库的SQL线程读取Relay Log,并按照顺序执行其中的SQL语句,从而实现数据同步。

数据一致性保障

  • 主库和从库通过日志的顺序执行保证数据一致性。
  • 异步复制模式下,从库可能稍有延迟;半同步复制模式下,主库会等待至少一个从库确认接收日志。

主从分布架构图

在这里插入图片描述

组件作用
Binary Log主库记录所有数据变更的日志,是主从同步的核心。
I/O线程从库的线程,负责从主库获取Binary Log并写入Relay Log。
SQL线程从库的线程,负责读取Relay Log并执行其中的SQL语句。
Relay Log从库本地存储主库Binary Log的中间日志,用于SQL线程重放。

当主节点mysql接收到数据的时候,向binlog写入事务,binlog通过多线程的读取,发送到从节点,从节点先由IO线程接收,然后再写入laylog中,之后让laolog线程进行读取,最后放入到从节点的mysql中

主从同步的方式

异步复制(Asynchronous Replication)

主库提交事务后立即返回,不等待从库确认。

  • 优点:性能高,延迟低。
  • 缺点:从库可能滞后,数据一致性较差。
    在这里插入图片描述

半同步复制(Semi-Synchronous Replication)

主库提交事务后,至少等待一个从库确认接收日志

  • 优点:数据一致性更好。
  • 缺点:性能略有下降。
    在这里插入图片描述

全同步复制(Synchronous Replication)

主库提交事务后,等待所有从库确认接收日志

  • 优点:数据一致性更好。
  • 缺点:性能较低。
    在这里插入图片描述

增强半同步复制 (Rising-Semi-Synchronous Replication)

对半同步复制做的一个改进,原理上几乎是一样的,主要是解决幻读的问题.

  • 优点:数据一致性更好,解决幻读问题
  • 缺点:性能略有下降
    在这里插入图片描述

主要配置

1.主库配置
启用Binary Log:

[mysqld]
log-bin=mysql-bin
server-id=1  # 唯一标识符

创建同步用户(供从库连接):

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

2.从库配置
指定主库信息:

CHANGE MASTER TO
  MASTER_HOST='master_host',
  MASTER_USER='repl',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=120;

启动同步:

START SLAVE;

3.验证同步状态
检查从库状态:

SHOW SLAVE STATUS\G;

实战

创建对应目录
在这里插入图片描述

编辑Master目录下的Dockerfile:

FROM mysql:5.7.36
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

FROM mysql:5.7.36:这一行指定了 Docker 镜像的基础镜像。
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime:

  • RUN 是 Dockerfile 中的一个指令,表示在构建镜像时运行指定的命令。
  • ln -sf 是创建符号链接(symbolic link)的命令:
  • -s 表示创建符号链接(软链接)。
  • -f 表示如果目标文件已存在,则强制覆盖。
  • /usr/share/zoneinfo/Asia/Shanghai 是系统中的时区文件,表示中国上海时区(东八区)。
  • /etc/localtime 是 Linux 系统中表示当前容器时区的文件。
    这一行的作用是将 /etc/localtime 链接到 /usr/share/zoneinfo/Asia/Shanghai,从而将容器的时区设置为上海时区(UTC+8)。

编辑slave目录下的Dockerfile:

FROM mysql:5.7.36
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./slave/slave.sql /docker-entrypoint-initdb.d

编辑slave.sql

change master to master_host='mysql-master', 
master_user='root',master_password='root',master_port=3306;
start slave;

CHANGE MASTER TO 语句:用于配置从库连接主库的相关信息。
参数说明:

  • master_host=‘mysql-master’:
    指定主库的主机名或 IP 地址,这里的主库名是 mysql-master。
  • master_user=‘root’:
    指定用于从库连接主库的用户名,这里是 root。
  • master_password=‘root’:
    指定用于从库连接主库的密码,这里是 root。
  • master_port=3306:
    指定主库的端口号,这里是默认的 MySQL 端口 3306。
  • 作用:
    这部分语句告诉从库如何连接到主库,包括主库地址、用户名、密码和端口号

START SLAVE 语句:

  • 用于启动从库的复制进程。
  • 在执行 CHANGE MASTER TO 配置后,从库需要执行 START SLAVE; 才能开始从主库拉取数据并同步

在主目录mysqlcluster下创建docker-compose.yml文件进行编辑:

name: mysqlcluster

services:
  mysql-master:
    build:
      context: ./
      dockerfile: ./master/Dockerfile
    image: mysqlmaster:1.0
    restart: always
    container_name: mysql-master
    volumes:
      - ./mastervarlib:/var/lib/mysql
    ports:
      - 8080:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    privileged: true
    command: ['--server-id=1',
      '--log-bin=master-bin',
      '--binlog-ignore-db=mysql',
      '--binlog_cache_size=256M',
      '--binlog_format=mixed',
      '--lower_case_table_names=1',
      '--character-set-server=utf8',
      '--collation-server=utf8_general_ci']

  mysql-slave:
    build:
      context: ./
      dockerfile: ./slave/Dockerfile
    image: mysqlslave:1.0
    restart: always
    container_name: mysql-slave
    volumes:
      - ./slavevarlib:/var/lib/mysql
    ports:
      - 8081:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    privileged: true
    command: ['--server-id=2',
      '--relay_log=slave-relay',
      '--lower_case_table_names=1',
      '--character-set-server=utf8',
      '--collation-server=utf8_general_ci']
    depends_on:
      - mysql-master

  mysql-slave2:
    build:
      context: ./
      dockerfile: ./slave/Dockerfile
    image: mysqlslave:1.0
    restart: always
    container_name: mysql-slave2
    volumes:
      - ./slavevarlib2:/var/lib/mysql
    ports:
      - 8082:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    privileged: true
    command: ['--server-id=3',
      '--relay_log=slave-relay',
      '--lower_case_table_names=1',
      '--character-set-server=utf8',
      '--collation-server=utf8_general_ci']
    depends_on:
      - mysql-master

mysql-master:

  • restart:指定容器的重启策略。
    always 表示无论容器因何种原因退出,Docker 都会尝试重新启动它。

  • volume:用于将主机目录挂载到容器中
    ./mastervarlib 是主机上的目录,/var/lib/mysql 是容器中 MySQL 默认的数据存储路径。
    作用:将 MySQL 的数据存储在主机上,确保容器重启或删除后数据不会丢失。

  • envirnment:设置环境变量
    MYSQL_ROOT_PASSWORD: root 指定 MySQL 的 root 用户密码为 root。
    privileged:设置容器以特权模式运行

  • command:
    设置 MySQL 服务器的唯一 ID,主从复制中必须指定,且每个服务器的 ID 必须唯一
    启用二进制日志(Binary Log),日志文件前缀为 master-bin,记录主库的写操作
    指定忽略mysql系统数据库的二进制日志记录
    设置二进制日志缓存的大小为 256MB
    设置二进制日志的格式为 mixed
    设置表名不区分大小写
    设置服务器的默认字符集为 utf8
    设置服务器的默认排序规则为 utf8_general_ci

mysql-slave1:

  • depends-on:指定服务之间的依赖关系
    mysql-slave 服务依赖于 mysql-master 服务
    确保在启动 mysql-slave 之前,mysql-master 服务已经启动

创建出镜像并创建启动对应的容器:

docker compose build
docker compose up -d

查看对应状态

docker ps

在这里插入图片描述
运行主数据库查看运转

docker exec -it mysql-master bash

连上主库,查看数据库可以看到运行正常

mysql -u root -p

在这里插入图片描述
连接上从库,通过命令查看

SHOW MASTER STATUS\G
SHOW SLAVE STATUS\G

在这里插入图片描述
主库创建一个数据库

create database test;

在这里插入图片描述
从库上查看,可以看到也有了对应的test数据库:
在这里插入图片描述
主库上创建表,插入数据:

mysql> use test;
Database changed
mysql> create table users(sno int,sname varchar(20));
Query OK, 0 rows affected (0.03 sec)


mysql> insert into  users values (1,'xixi');
Query OK, 1 row affected (0.02 sec)


mysql> insert into  users values (2,'haha');
Query OK, 1 row affected (0.01 sec)

在从表上查看

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A


Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| users          |
+----------------+
1 row in set (0.00 sec)


mysql> select * from users;
+------+-------+
| sno  | sname |
+------+-------+
|    1 | xixi  |
|    2 | haha  |
+------+-------+
2 rows in set (0.00 sec)

至此完成了mysql主从集群的部署;

docker compose down

搭建Redis集群

Redis 集群是 Redis 提供的一种分布式解决方案,旨在通过将数据分布到多个节点上来实现水平扩展和高可用性。它解决了单机 Redis 在存储容量、读写性能和容错能力上的限制,适用于大规模、高并发的应用场景。

核心特性

数据分片(Sharding)

  • Redis 集群将数据分散到多个节点上,每个节点负责一部分数据。
  • 数据分片基于哈希槽(Hash Slot),共有 16384 个哈希槽,每个键通过哈希算法映射到一个哈希槽,再分配到具体节点。

高可用性

  • 每个主节点(Master)可以有多个从节点(Slave)。
  • 当主节点故障时,集群会自动将从节点提升为主节点(故障转移),确保服务可用。

水平扩展

  • 可以通过增加节点来扩展集群的存储容量和性能。
  • 集群支持动态添加或移除节点,无需停机。

无中心架构

  • Redis 集群没有中心节点,所有节点平等,避免了单点故障。

下载源码压缩包

首先,我们要去官网,找到源码的下载链接
redis-7.0.15 版本的链接

组成

  • 主节点(Master):负责处理读写请求和存储数据。
  • 从节点(Slave):复制主节点的数据,用于故障转移和只读请求。
  • 哈希槽(Hash Slot):数据分片的基本单位,共有 16384 个。

准备目录

 mkdir /data/ahri/dockerfile/rediscluster/redis

设置redis.conf

在redis目录下创建一个redis.conf进行配置

#表示前台运行
daemonize no
#端口
port 6379
#持久化
dir /data/redis
#启用集群
cluster-enabled yes
#集群参数配置
cluster-config-file nodes.conf
#集群超时时间
cluster-node-timeout 5000
#密码配置
requirepass 123456
#主节点密码配置
masterauth 123456
#表示远端可以连接
bind * -::*

编辑 Dockefile

在redis目录下创建Dockerfile文件进行编辑

注:centos:7 已经停止维护了,所以这里使用了ubuntu

# 第一阶段:构建阶段
FROM ubuntu:22.04 AS buildstage

# 更新包列表并安装必要的构建工具和依赖
RUN apt-get update && apt-get install -y \
    build-essential \
    wget \
    gcc \
    g++ \
    make \
    && rm -rf /var/lib/apt/lists/*

# 下载 Redis 源码和配置文件
#wget https://download.redis.io/releases/redis-7.0.15.tar.gz
ADD redis-7.0.15.tar.gz /
ADD redis.conf /redis/

# 切换到 Redis 源码目录并编译
WORKDIR /redis-7.0.15
RUN make 

# 将 Redis 可执行文件移动到指定目录
RUN mv /redis-7.0.15/src/redis-server /redis/ && mv /redis-7.0.15/src/redis-cli /redis/
ENTRYPOINT ["/redis/redis-server", "/redis/redis.conf"]

# 第二阶段:运行阶段
FROM ubuntu:22.04
RUN mkdir -p /data/redis && mkdir -p /redis
COPY --from=buildstage /redis /redis
EXPOSE 6379
ENTRYPOINT ["/redis/redis-server", "/redis/redis.conf"] 

测试

通过docker build创建镜像进行测试

docker build -t myredis:v1.0 .

尝试启动一个容器进行测试

docker run -d --name myredis  --rm myredis:1.0 
416541b280d91f04e80c7df864ed097d5471b26bf93a5c82b090d458402217f9

在这里插入图片描述
测试成功,释放资源

docker stop myredis

编写Docker-compose.yml

name: rediscluster

services:
  redis01:
    image: myredis:1.0
    build: ./redis
    ports:
      - 6379:6379
    container_name: redis01
    healthcheck:
      test: /redis/redis-cli ping
      interval: 10s
      timeout: 5s
      retries: 10
  redis02:
    image: myredis:1.0
    container_name: redis02
    healthcheck:
      test: /redis/redis-cli ping
      interval: 10s
      timeout: 5s
      retries: 10
  redis03:
    image: myredis:1.0
    container_name: redis03
    healthcheck:
      test: /redis/redis-cli ping
      interval: 10s
      timeout: 5s
      retries: 10
  redis04:
    image: myredis:1.0
    container_name: redis04
    healthcheck:
      test: /redis/redis-cli ping
      interval: 10s
      timeout: 5s
      retries: 10
  redis05:
    image: myredis:1.0
    container_name: redis05
    healthcheck:
      test: /redis/redis-cli ping
      interval: 10s
      timeout: 5s
      retries: 10
  redis06:
    image: myredis:1.0
    container_name: redis06
    healthcheck:
      test: /redis/redis-cli ping
      interval: 10s
      timeout: 5s
      retries: 10
  redis07:
    image: myredis:1.0
    container_name: redis07
    entrypoint: ["/redis/redis-cli",
      "--cluster",
      "create",
      "redis01:6379",
      "redis02:6379",
      "redis03:6379",
      "redis04:6379",
      "redis05:6379",
      "redis06:6379",
      "--cluster-replicas",
      "1",
      "-a",
      "123456",
      "--cluster-yes"]
    depends_on:
      redis01:
        condition: service_healthy
      redis02:
        condition: service_healthy
      redis03:
        condition: service_healthy
      redis04:
        condition: service_healthy
      redis05:
        condition: service_healthy
      redis06:
        condition: service_healthy
  

测试

通过下面命令检查配置文件是否书写格式错误

docker compose config

对 容器进行启动

docker compose up -d

查看容器的状态
在这里插入图片描述
查看07日志是否创建成功

root@VM-8-12-ubuntu:/data/ahri/dockerfile/rediscluster# docker logs -f redis07
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica redis05:6379 to redis01:6379
Adding replica redis06:6379 to redis02:6379
Adding replica redis04:6379 to redis03:6379
M: 148bf218eac4b30786ef89e5c5cc1bf4facdf4be redis01:6379
   slots:[0-5460] (5461 slots) master
M: 5964d6968e8527be920f1d60aad8e549ac1c327a redis02:6379
   slots:[5461-10922] (5462 slots) master
M: 4a33cf88ed2334e78fe468c35446a2a8bd14f805 redis03:6379
   slots:[10923-16383] (5461 slots) master
S: 4ee8406f204b7ee8778a40f7d6ec979cc4f9bfff redis04:6379
   replicates 4a33cf88ed2334e78fe468c35446a2a8bd14f805
S: fb59eccda63bd4bb8d33526262612e1ab694da02 redis05:6379
   replicates 148bf218eac4b30786ef89e5c5cc1bf4facdf4be
S: 8b7b54ee2f4c7a327e1e954db379a519aa7e68b8 redis06:6379
   replicates 5964d6968e8527be920f1d60aad8e549ac1c327a
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node redis01:6379)
M: 148bf218eac4b30786ef89e5c5cc1bf4facdf4be redis01:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 4a33cf88ed2334e78fe468c35446a2a8bd14f805 172.19.0.5:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 4ee8406f204b7ee8778a40f7d6ec979cc4f9bfff 172.19.0.2:6379
   slots: (0 slots) slave
   replicates 4a33cf88ed2334e78fe468c35446a2a8bd14f805
S: fb59eccda63bd4bb8d33526262612e1ab694da02 172.19.0.7:6379
   slots: (0 slots) slave
   replicates 148bf218eac4b30786ef89e5c5cc1bf4facdf4be
S: 8b7b54ee2f4c7a327e1e954db379a519aa7e68b8 172.19.0.4:6379
   slots: (0 slots) slave
   replicates 5964d6968e8527be920f1d60aad8e549ac1c327a
M: 5964d6968e8527be920f1d60aad8e549ac1c327a 172.19.0.6:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

登录容器01-06任意一个进行查看
登录进redis客户端

docker exec -it redis02 bash
/redis/redis-cli -c -a 123456

查看对应的配置信息

cluster info

查看对应日志

cluster nodes

设置一个key值,然后获取

set a 123
get a
"123"

退出后释放资源

exit
exit
docker compose down

注意
[ERR] Node redis01:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
出现这个错误时,检查你的 docker-compose.yml 文件或 Docker 命令,确保每个 Redis 实例的端口映射是唯一的,并且没有冲突

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2333578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯嵌入式考前模块总结

一.RTC 使用RTC直接再cubeMX中配置启动时钟和日历 如第六届省赛 想要让RTC的秒每隔一秒递增1需要在时钟树界面观察RTC的主频 由于RTC时钟主频为32KHZ将异步预分频计数器的值设为31,将同步预分频计数器的值设为999这样就可以将RTC的时钟信号分频为1HZ达到1秒自增的…

关于举办“2025年第五届全国大学生技术创新创业大赛“的通知

赛事含金量 大赛获奖即可有机会为你的大学里的“创新创业”加分!这是每个大学要求必须修满的学分! 中国“互联网+”大学生创新创业大赛磨刀赛!“挑战杯”中国大学生创业计划大赛必参赛! 国赛获奖,“互联…

Ingress蓝绿发布

Ingress蓝绿发布 Ingress常用注解说明yaml资源清单绿色版本yml资源清单蓝色版本yaml资源清单 主Ingress金丝雀Ingress基于客户端请求头的流量切分结果验证 基于客户端来源IP的流量切分结果验证 基于服务权重的流量切分结果验证 基于IP来源区域来切分IP---方案未验证基于User-Ag…

基于AOP+Log4Net+AutoFac日志框架

1.项目概述 这是一个基于 C# 的 WPF 项目 WpfApp12log4net,它综合运用了依赖注入、日志记录和接口实现等多种技术,同时使用了 Autofac、Castle.Core 和 log4net 等第三方库。 2.配置log4net 新建一个Log4Net.config,配置需要记录的日志信息…

python推箱子游戏

,--^----------,--------,-----,-------^--,-------- 作者 yty---------------------------^----------_,-------, _________________________XXXXXX XXXXXX XXXXXX ______(XXXXXXXXXXXX(________(------ 0 [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,0,0,0,0,0,0,0,…

华为hcie证书的有效期怎么判断?

在ICT行业,华为HCIE证书堪称含金量极高的“敲门砖”,拥有它往往意味着在职场上更上一层楼。然而,很多人在辛苦考取HCIE证书后,却对其有效期相关事宜一知半解。今天,咱们就来好好唠唠华为HCIE证书的有效期怎么判断这个关…

PowerBI 条形图显示数值和百分比

数据表: 三个度量值 销售额 SUM(销量表[销售量])//注意, 因为Y轴显示的产品,会被筛选,所以用ALLSELECTED来获取当前筛选条件下,Y轴显示的产品 百分比 FORMAT(DIVIDE([销售额],CALCULATE([销售额],ALLSELECTED(销量表[产品编码]))),"0…

基于YOLOv8的火车轨道检测识别系统:技术实现与应用前景

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 引言:火车轨道检测领域概述 铁路运输作为国民经济的大动脉,其安全运行至关重要…

css使用mix-blend-mode的值difference实现内容和父节点反色

1. 使用场景 往往开发过程中,经常遇到产品说你这个背景图和文字颜色太接近了,能不能适配下背景图,让用户能够看清具体内容是啥。 这么说吧,这种需求场景非常合理,因为你做开发就是要给用户一个交代,给他们…

Pytest多环境切换实战:测试框架配置的最佳实践!

你是否也遇到过这种情况:本地测试通过,一到测试环境就翻车?环境变量错乱、接口地址混乱、数据源配置丢失……这些「环境切换」问题简直像定时炸弹,随时引爆你的测试流程! 测试人员每天都跟不同的环境打交道&#xff0…

单细胞多组学及空间组学数据分析与应用

一、引言 生命科学研究正处于快速发展的阶段,随着技术的不断革新,对生物系统的理解也在逐步深入到单细胞和空间层面。单细胞多组学及空间组学技术应运而生,它们突破了传统研究手段在细胞异质性和空间结构解析上的局限,为我们打开…

[ctfshow web入门] web39

信息收集 题目发生了微妙的变化,只过滤flag,include后固定跟上了.php。且没有了echo $flag;,虽说本来就没什么用 if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){include($c.".php");} }else{…

HarmonyOS-ArkUI 装饰器V2 @ObservedV2与@Trace装饰器

参考文档: 文档中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/arkts-new-observedv2-and-trace-V14#trace%E8%A3%85%E9%A5%B0%E5%AF%B9%E8%B1%A1%E6%95%B0%E7%BB%84由于V2的装饰器比V1的装饰器更加易用,尽管学习的过程中用到的都是V1的装饰器,但…

基于ImGui+FFmpeg实现播放器

基于ImGuiFFmpeg实现播放器 演示: ImGui播放器 继续研究FFmpeg,之前做了一个SDL的播放器,发现SDL的可视化UI界面的功能稍微差了点,所以今天我们换了一个新的工具,也就是ImGui。 ImGui官方文档:https://g…

python的web框架flask(hello,world版)

问题 最近需要基于一个开源项目进行二次开发,但是,现在的我主修java,从来没有接触过python的web开发。所以,我现在需要学习一下flask的hello,world。 python版本选择 通过这个Python版本状态页面Status of Python v…

Java面试39-Zookeeper中的Watch机制的原理

Zookeeper是一个分布式协调组件,为分布式架构下的多个应用组件提供了顺序访问控制能力。它的数据存储采用了类似于文件系统的树形结构,以节点的方式来管理存储在Zookeeper上的数据。 Zookeeper提供了一个Watch机制,可以让客户端感知到Zooke…

同时打开多个Microchip MPLAB X IDE

0.引用 Microchip 32位MCU CAN驱动图文教程-附源码 - 哔哩哔哩 https://bbs.21ic.com/icview-3391426-1-1.html https://bbs.21ic.com/icview-3393632-1-1.html 1.前言 工作中接触到使用Microchip 的 MPLAB X IDE 开发工具,使用的MCU是Microchip SAMD21J18A MCU…

达梦数据库使用druid提示:dbType not support : dm

简单处理: 移除wall即可 (但是用druid那都希望能用上它的功能的,不然为什么不用其他没带检查的jdbc呢。) 中等复杂处理: druid 是阿里开源的项目,所以去github上找对应版本的源码下载:https:/…

[定位器]晶艺LA1823,4.5V~100V, 3.5A,替换MP9487,MP9486A,启烨科技

Features  4.5V to 100V Wide Input Range  3.5A Typical Peak Current Limit  Integrated 500mΩ low resistance high side power MOS.  Constant On Time Control with Constant Switching Frequency.  180μA Low Quiescent Current  150kHz/240kHz/420kHz Swi…

难度偏低,25西电人工智能学院821、833、834考研录取情况

1、人工智能学院各个方向 2、人工智能学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、智能院25年院线相对于24年院线 全部专业下降比较多,其中控制科学与工程下降20分,计算机科学与技术下降20分,计算机技术[专硕]下降…