(八) mysql主从以及Redis集群

news2024/11/23 19:34:13

mysql主从以及Redis集群

  • 一、Mysq主从复制安装
    • 1、新建主服务器容器实例3307
    • 2、进入/mydata/mysql-master/conf目录下新建my.cnf
    • 3、进入mysql-master容器
    • 4、master容器实例内创建数据同步用户
    • 5、新建从服务器容器实例3308
    • 6、创建从机的配置文件
    • 7、在主数据库中查看主从同步状态
    • 8、进入mysql-slave容器配置主从复制
    • 9、在从数据库中查看主从同步状态以及开启同步
    • 10、主从复制测试
  • 二、Redis集群
    • 1 、分布式存储算法问题
      • 1、哈希取余分区
      • 2、一致性哈希算法分区
      • 3、哈希槽分区
    • 2、三主三从redis集群
      • 1、集群搭建
        • 1、服务器防火墙放行端口以及放行阿里云安全组
        • 2、启动6台节点
        • 3、进入容器redis-node-1并为6台机器构建集群关系
        • 4、进入6381作为切入点,查看集群状态
      • 2、主从容错切换迁移
        • 1、数据读写存储
        • 2、检查集群信息
        • 3、主从容错切换迁移
      • 3、主从扩容
        • 1、新建6387、6388两个节点+新建后启动+查看是否8节点
        • 2、进入6387容器实例内部
        • 3、将新增的6387节点(空槽号)作为master节点加入原集群
        • 4、检查集群情况(第1次)
        • 5、重新分派槽号
        • 6、检查集群情况(第2次)
        • 7、为主节点6387分配从节点6388
        • 8、检查集群情况(第三次)
      • 4、主从缩容
        • 1、检查集群情况1获得6388的节点ID
        • 2、先将从机 6388 s删除
        • 3、将6387的槽号清空,重新分配,这里将清出来的槽号都给6381
        • 4、检查集群情况第二次
        • 5、将6387删除
        • 6、检查集群情况第三次

一、Mysq主从复制安装

1、新建主服务器容器实例3307

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

高版本最后的配置文件的路径有点不同

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql/conf.d \ 
-e MYSQL_ROOT_PASSWORD=root \
-d mysql

2、进入/mydata/mysql-master/conf目录下新建my.cnf

vim my.cnf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称,这是自带的
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

在这里插入图片描述

修改完配置后重启master实例

docker restart mysql-master

3、进入mysql-master容器

docker exec -it mysql-master /bin/bash
mysql -uroot -proot

在这里插入图片描述

4、master容器实例内创建数据同步用户

# 创建用户 slave ,密码是 1234556
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

REPLICATION CLIENT:授予此权限,复制用户可以使用 SHOW MASTER STATUS, SHOW SLAVE STATUS和 SHOW BINARY LOGS来确定复制状态。

REPLICATION SLAVE:授予此权限,复制才能真正工作。

# 给这个用户授权
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

5、新建从服务器容器实例3308

高版本就像之前说的

docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7

在这里插入图片描述

6、创建从机的配置文件

进入/mydata/mysql-slave/conf目录下新建my.cnf

vim my.cnf
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

在这里插入图片描述

重启从机

docker restart mysql-slave

在这里插入图片描述

7、在主数据库中查看主从同步状态

show master status;

在这里插入图片描述

8、进入mysql-slave容器配置主从复制

docker exec -it mysql-slave /bin/bash
mysql -uroot -proot

配置主从复制

change master to master_host='自己宿主机的ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;

主从复制命令参数说明

  • master_host:主数据库的IP地址;
  • master_port:主数据库的运行端口;
  • master_user:在主数据库创建的用于同步数据的用户账号;
  • master_password:在主数据库创建的用于同步数据的用户密码;
  • master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
  • master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
  • master_connect_retry:连接失败重试的时间间隔,单位为秒。

9、在从数据库中查看主从同步状态以及开启同步

# \G 就是让结果是键值对形式展示,不然就是数据表形式展示
show slave status \G;

在这里插入图片描述

在从数据库中开启主从同步

start slave;

Mysql 8 版本的新增一个操作

alter USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

记得开放安全组以及防火墙,不然 Slave_IO_Running 会是 Connecting

在这里插入图片描述

查看从数据库状态发现已经同步

在这里插入图片描述

10、主从复制测试

在这里插入图片描述

在这里插入图片描述
测试成功!

二、Redis集群

1 、分布式存储算法问题

面试问题

1~2亿条数据需要缓存,请问如何设计这个存储案例?

回答

分布式存储,用redis如何落地?也就是数据怎么存储在多个分布式redis里,主要有三种

1、哈希取余分区

在这里插入图片描述

2亿条记录就是2亿个k,v,我们单机不行必须要分布式多机,假设有3台机器构成一个集群,用户每次读写操作都是根据公式:hash(key) % N个机器台数,计算出哈希值,用来决定数据映射到哪一个节点上。
因为读写时的Key都是一样的,所以读写时根据哈希求余的值寻找的服务器都是一样的,不会错误,也防止了大量数据同时在一台机器上读写,问题就是分母由服务器个数决定,一旦redis服务器宕机或者新增就需要重新洗牌,这是不可能采用的

优点:
简单粗暴,直接有效,只需要预估好数据规划好节点,例如3台、8台、10台,就能保证一段时间的数据支撑。使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求(并维护这些请求的信息),起到负载均衡+分而治之的作用。

缺点:
原来规划好的节点,进行扩容或者缩容就比较麻烦了额,不管扩缩,每次数据变动导致节点有变动,映射关系需要重新进行计算,在服务器个数固定不变时没有问题,如果需要弹性扩容或故障停机的情况下,原来的取模公式就会发生变化:Hash(key)/3会变成Hash(key) /?。此时地址经过取余运算的结果将发生很大变化,根据公式获取的服务器也会变得不可控。
某个redis机器宕机了,由于台数数量变化,会导致hash取余全部数据重新洗牌。

2、一致性哈希算法分区

一致性Hash算法目的

一致性哈希算法在1997年由麻省理工学院中提出的,设计目标是为了解决
分布式缓存数据变动和映射问题,某个机器宕机了,分母数量改变了,自然取余数不行了

目的是当服务器个数发生变动时,尽量减少影响客户端到服务器的映射关系

3大步骤

  • 算法构建一致性哈希环

    在这里插入图片描述
    因为哈希值是一个32位无符号整形。所以在【0,2^32-1】这个区间。然后在逻辑上构成一个环
    上述的意思就是采用算法不用服务器数量作为分母进行取余,而是用整个哈希值空间进行取余,也就是 2^32-1 ,因为哈希值全量集就在0到这个空间里,这样就不会因为服务器而改动,在逻辑上也就是分布在这个哈希环上

  • 服务器IP节点映射 在这里插入图片描述
    第二步就是将各个服务器的ip或者主机名进行哈希运算后,得到的哈希值进行分布在哈希环上,进行节点的映射

  • key落到服务器的落键规则

    在这里插入图片描述
    这个意思就是这些key经过哈希运算后会得到一个哈希值,然后就知道这个key在环上的位置,然后顺时针在环上走,碰到的第一个之前进行IP映射的服务器就是这个key该存储的服务器

优点

  • 一致性哈希算法的容错性
    在这里插入图片描述
    也就是假设一台服务器宕机了,影响的数据区间就是这台服务器到它之前那台服务器之间的这段数据,但是压力增大的服务器是后一台服务器,因为这段数据都给后一天服务器进行存储

  • 一致性哈希算法的扩展性

    在这里插入图片描述
    这个就是为了减轻某台服务器的压力,你可以在这台服务器与这台之前的服务器之间加上一台服务器,然后将数据都复制过去,这样就可以很好的降低压力

缺点

一致性哈希算法的数据倾斜问题

Hash环的数据倾斜问题

也就是服务器太少,在环上分布不均匀,导致数据倾斜到某些机器上,所以说当你服务器不够多的时候不建议用这种算法
一致性Hash算法在服务节点太少时,容易因为节点分布不均匀而造成数据倾斜(被缓存的对象大部分集中缓存在某一台服务器上)问题,例如系统中只有两台服务器:

在这里插入图片描述

总结

为了在节点数目发生改变时尽可能少的迁移数据

将所有的存储节点排列在收尾相接的Hash环上,每个key在计算Hash后会顺时针找到临近的存储节点存放。

而当有节点加入或退出时仅影响该节点在Hash环上顺时针相邻的后续节点

优点
加入和删除节点只影响哈希环中顺时针方向的相邻的节点,对其他节点无影响。

缺点
数据的分布和节点的位置有关,因为这些节点不是均匀的分布在哈希环上的,所以数据在进行存储时达不到均匀分布的效果。

3、哈希槽分区

主要算法就是经过crc校验后然后哈希值对16383取模进行分配给槽

产生原因

为了解决一致性哈希算法的数据倾斜问题

概念

哈希槽实质就是一个数组,数组[0,2^14 -1]形成hash slot空间。

解决均匀分配的问题在数据和节点之间又加入了一层,把这层称为哈希槽(slot),用于管理数据和节点之间的关系,现在就相当于节点上放的是槽,槽里放的是数据

在这里插入图片描述

槽解决的是粒度问题,相当于把粒度变大了,这样便于数据移动。
哈希解决的是映射问题,使用key的哈希值来计算所在的槽,便于数据分配。

说白了就是将数据集中化,用槽来集中,提高粒度

有多少个hash槽

一个集群只能有16384个槽,编号0-16383(0-2^14-1)。这些槽会分配给集群中的所有主节点,分配策略没有要求。可以指定哪些编号的槽分配给哪个主节点。集群会记录节点和槽的对应关系。解决了节点和槽的关系后,接下来就需要对key求哈希值,然后对16384取余,余数是几key就落入对应的槽里。slot = CRC16(key) % 16384。以槽为单位移动数据,因为槽的数目是固定的,处理起来比较容易,这样数据移动问题就解决了。

为什么是 16384个槽

在这里插入图片描述

哈希槽计算方法

Redis 集群中内置了 16384 个哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,也就是映射到某个节点上。如下代码,key之A 、B在Node2, key之C落在Node3上

在这里插入图片描述

==这里假设新增或者删除某个节点,槽会按照你定的分配策略重新分配给节点,然后原有的槽中的数据会一起带着迁移,这样就可以有效的防止数据倾斜问题,不便的就是槽的从新分配以及数据的迁移 ==

引申思考

槽的分配策略是怎么定

2、三主三从redis集群

架构图

从机不一定如下图,可能随机

在这里插入图片描述

1、集群搭建

1、服务器防火墙放行端口以及放行阿里云安全组

这里不仅是节点的端口,还有集群总线端口,比如redis的一个节点端口是6381,集群总线端口就是16381.不放行就会一直在等待节点加入

在这里插入图片描述

防火墙

firewall-cmd --zone=public --add-port=6381/tcp --permanent
firewall-cmd --zone=public --add-port=6382/tcp --permanent
firewall-cmd --zone=public --add-port=6383/tcp --permanent
firewall-cmd --zone=public --add-port=6384/tcp --permanent
firewall-cmd --zone=public --add-port=6385/tcp --permanent
firewall-cmd --zone=public --add-port=6386/tcp --permanent
firewall-cmd --zone=public --add-port=16381/tcp --permanent
firewall-cmd --zone=public --add-port=16382/tcp --permanent
firewall-cmd --zone=public --add-port=16383/tcp --permanent
firewall-cmd --zone=public --add-port=16384/tcp --permanent
firewall-cmd --zone=public --add-port=16385/tcp --permanent
firewall-cmd --zone=public --add-port=16386/tcp --permanent

##重启防火墙
systemctl restart firewalld.service
## 查看端口
firewall-cmd --list-ports

在这里插入图片描述

阿里云放行

在这里插入图片描述

2、启动6台节点

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
 
docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
 
docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
 
docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
 
docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
 
docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

命令解释

  • docker run :创建并运行docker容器实例
  • –name redis-node-6 :容器名字
  • –net host : 使用宿主机的IP和端口,默认。其实也就是用这个可以不用端口映射,直接使用宿主机端口
  • –privileged=true : 获取宿主机root用户权限
  • -v /data/redis/share/redis-node-6:/data :容器卷,宿主机地址:docker内部地址
  • redis:6.0.8 :redis镜像和版本号
  • –cluster-enabled yes :开启redis集群
  • –appendonly yes :开启持久化
  • –port 6386 :redis端口号

效果如下

在这里插入图片描述

3、进入容器redis-node-1并为6台机器构建集群关系

进入节点

docker exec -it redis-node-1 /bin/bash

构建主从关系

redis-cli --cluster create 你的服务器IP:6381 你的服务器IP:6382 你的服务器IP:6383 你的服务器IP:6384 你的服务器IP:6385 你的服务器IP:6386 --cluster-replicas 1

--cluster-replicas 1 : 表示为每个master创建一个slave节点

这里redis会自己分配哈希槽以及主从机的配对(主从配对是随机的)

在这里插入图片描述
输入 yes
成功如下,如果一直在等待记得放行端口以及安全组
在这里插入图片描述

4、进入6381作为切入点,查看集群状态

#进入 6381
redis-cli -p 6381
#查看集群信息
cluster info

在这里插入图片描述

# 查看主从关系
cluster nodes

在这里插入图片描述

2、主从容错切换迁移

1、数据读写存储

进入6381

docker exec -it redis-node-1 /bin/bash
redis-cli -p 6381

对6381新增两个key,因为是集群模式。所以有哈希槽的存在,有些key在这种单机登录的情况下是存储不了的

在这里插入图片描述

防止路由失效登录的时候加参数-c并新增两个key

-c :这个参数的意思是开启集群模式(遵循ASK以及重定向),也就是因为哈希槽的存在,不同节点分配不同的哈希槽,当这个key不在你所登录的节点上的哈希槽时,他会自己路由到对应的哈希槽上,防止路由失效

在这里插入图片描述

2、检查集群信息

redis-cli --cluster check 你的IP:6381

在这里插入图片描述

3、主从容错切换迁移

主6381和从机切换,先停止主机6381

docker stop redis-node-1

可以随便进入一个节点查看集群关系

cluster nodes 

效果图
在这里插入图片描述

我这里的一号机的从机是五号机,所以当一号机宕机后,五号机会变成主机

在这里插入图片描述

重启6381

docker start redis-node-1

查看集群关系

在这里插入图片描述
发现一号机重启后不是主机了,而是成为了五号机的从机

再停五号机

docker stop redis-node-5

再启五号机

docker start redis-node-5

再次查看集群关系,恢复原状,一号机又是五号机的主机了

在这里插入图片描述

检查集群信息,恢复到原状

redis-cli --cluster check 自己IP:6381

3、主从扩容

这里演示三主三从再加上一主一从,别忘了放开安全组以及防火墙

1、新建6387、6388两个节点+新建后启动+查看是否8节点

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

在这里插入图片描述

2、进入6387容器实例内部

docker exec -it redis-node-7 /bin/bash

3、将新增的6387节点(空槽号)作为master节点加入原集群

将新增的6387作为master节点加入集群

redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381

6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜6381的码头从而找到组织加入集群

在这里插入图片描述

4、检查集群情况(第1次)

redis-cli --cluster check 真实ip地址:6381

这里7号机是没有槽位以及从机的

在这里插入图片描述

5、重新分派槽号

redis-cli --cluster reshard IP地址:端口号

在这里插入图片描述

6、检查集群情况(第2次)

redis-cli --cluster check 120.24.250.18:6381

发现7号机有槽位了,还是原来的三个主机每个分一点凑成每个都是4096个槽位,但是7号机没有从机

为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

注意并不是从新分配是每一个原有的主机匀一点给新的,平均分配,由你指定的总共匀多少
在这里插入图片描述

7、为主节点6387分配从节点6388

redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

8、检查集群情况(第三次)

发现7号机的从机是8号机了,而且有槽位了
在这里插入图片描述

4、主从缩容

目的:6387和6388下线

做法:首先删除节点需要先从从机进行删除,然后将主机的槽位重新分配,就是将要删除的主机槽位分给需要保留的节点,最后删除主机成为三主三从

1、检查集群情况1获得6388的节点ID

redis-cli --cluster check 你的IP:6382

得到6388的id : b1947c64d586211a345d11a7846a4862cf0bd870

2、先将从机 6388 s删除

redis-cli --cluster del-node ip:从机端口 从机6388节点ID

检查集群信息,只有七台机器了

在这里插入图片描述

3、将6387的槽号清空,重新分配,这里将清出来的槽号都给6381

redis-cli --cluster reshard 你的ip:6381

运行过程说明
在这里插入图片描述

4、检查集群情况第二次

4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了

redis-cli --cluster check 你的IP:6381

在这里插入图片描述

5、将6387删除

redis-cli --cluster del-node ip:端口 6387节点ID

6、检查集群情况第三次

已经移除6387主机
在这里插入图片描述

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

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

相关文章

Linux——shell及其基本命令

一、认识shell Shell是一个命令语言解释器。登陆Linux后,所有的命令都被shell解释,它支持函数、变量、数组、程序设计结构等。分为Bourne Shell和 C Shell,红帽默认Bash,是B Shell的扩展,完全兼容。 1.启…

python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题

在强化学习中,我们有兴趣确定一种最大化获取奖励的策略。最近我们被客户要求撰写关于MDP的研究报告,包括一些图形和统计输出。假设环境是马尔可夫决策过程 (MDP)的理想模型 ,我们可以应用动态编程方法来解决强化学习…

【C++】STL——stack和queue的介绍与使用及模拟实现

stack和queue的介绍与使用及模拟实现 文章目录stack和queue的介绍与使用及模拟实现1.stack的介绍与使用1.1.stack的介绍1.2.stack的使用1.3.stack的模拟实现2.queue的介绍和使用2.1.queue的介绍2.2.queue的使用2.3.queue的模拟实现3. 容器适配器3.1.STL标准库中stack和queue的底…

分享15个全球顶尖的AIGC图片生成平台

人工智能正在改变许多行业的格局,而其中改变最直观和影响最大的就是AIGC领域的图像创作。 发展至今已经有很多AI图像生成平台,他们的共同特点就是使用人工智能将文本转换为图像,这是一次革命性的突破,也就是说通过这些AI工具可以…

springboot多数据源---3多数据源组件

一、dynamic-datasource多数源组件 两三个数据源、事务场景比较少 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 加密…

卡尔曼滤波

文章目录References卡尔曼滤波的作用世界中充满着不确定性在工程中整体感受状态空间方程结合例子理解公式公式6-1说明公式6-2说明参数H的意义总结怎么融合?从简单的例子入手-测量一枚硬币的直径融合实例卡尔曼公式详细推导协方差矩阵卡尔曼增益的推导详细推导误差协…

基于规则的分类(顺序覆盖算法)及最近邻分类器(KNN算法)

顺序覆盖算法的步骤 顺序覆盖算法的目标是提取一个分类规则,该规则覆盖训练集中大量正例,没有或仅覆盖少量反例。 整个过程包含以下四个步骤: 规则增长规则评估停止准则规则剪枝 顺序覆盖算法的第一步——规则增长 一般到特殊&#xff08…

高压功率放大器基于液晶生物光电传感器中的应用

实验名称:基于液晶的高通量蛋白质光电生物传感器 研究方向:生物识别与检测 测试目的: 蛋白质分析是疾病诊断和医学研究中一类重要的方法。本文提出了一种单基底的液晶生物光电传感器,可用于快速检测蛋白质的浓度。实验发现单基底液…

ZigBee案例笔记 -- LED控制与按键检测(输入/输出)

文章目录1.相关寄存器2.按键检测(引脚输入配置)3.LED控制(引脚输出配置)1.相关寄存器 CC2530(ZigBee)的开发也是类似51单片机一样针对寄存器进行配置,因为其内核实质上也是51内核,对…

Sulfo CY5-MAL|磺基-CY5 马来酰亚胺

Sulfo CY5-MAL|磺基-CY5 马来酰亚胺 英文名称:Cyanine5 maleimide Cyanine5 MAL Cy5 maleimide Cy5 MAL CAS:1437872-46-2 外观:深蓝色粉末 分子量:641.24 分子式:C38H45ClN4O3 花菁染料,一种发…

Hive实训任务

文章目录Hive 实训任务Hive 实训任务 熟练掌握如何创建外部表,加载数据,查询等 先创建一个cx_stu02 外部表,external 指定外部表关键字 create external table cx_stu02(name string,gender string,age int ) row format delimited fields…

一文初识大数据Flink框架

文章目录什么是Flinkflink在github上的现状flink发展历史flink能做什么flink 的高并发能力一些计算框架对比图flink发展方向flink生态体系处理无界和有界数据随处部署应用程序运行任何规模的应用程序利用内存性能官方文档地址:https://flink.apache.org/ 什么是Flink &#x…

php宝塔搭建部署实战Piwigo开源相册管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的Piwigo开源相册管理系统源码,感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#x…

基于Python + Requests 的Web接口自动化测试框架

之前采用JMeter进行接口测试,每次给带新人进行培训比较麻烦,干脆用Python实现,将代码和用例分离,易于维护。 项目背景 公司的软件采用B/S架构,进行数据存储、分析、管理 工具选择 python开发的速度很快&#xff0c…

【计算机考研408】数据结构代码规范

408-数据结构代码规范 文章目录408-数据结构代码规范序言优化参考文献考前预测线性表-链表单链表静态链表栈、队列、数组栈的顺序存储类型队列树与二叉树二叉树的定义二叉树的层序遍历树的双亲表示法孩子表示法树的孩子兄弟表示法图邻接矩阵存储法邻接表法二分查找/折半查找模板…

在linux上运行python脚本(安装pytorch踩坑记录,pyinstaller使用方式,构建docker镜像)

背景 脚本需要导入pytorch等库才能运行。 脚本在windows上运行成功,尝试放到linux上运行。 linux服务器内存较小。 方法一:在linux上安装依赖 把脚本放到linux上,直接安装依赖。 安装环境也有两种方法:一是先安装conda&#xf…

爬虫学习-requests模块

python中原生的一款基于网络请求的模块,功能强大,简单便捷,效率极高作用:模拟游览器发请求(15条消息) Header:请求头参数详解_平常心丷的博客-CSDN博客_headers参数(15条消息) requests的get方法和post方法_不问散人的博客-CSDN博…

二十九、之Java 数据结构

Java 数据结构 Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration)位集合(BitSet)向量(Vector)栈(Stack)字典&#xff…

Linux 下安装多个mysql

1、下载mysql https://downloads.mysql.com/archives/community/2、创建用户组 groupadd mysql 3、创建用户 useradd -r -g mysql5736 mysql5736 4、解压文件 tar zxvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 5、重命名 mv mysql-5.7.39-linux-glibc2.12-x86_64 …

随着企业信息化发展之源代码防泄密需求分析

源代码防泄密需求: 随着企业信息化发展的日益增长,软件行业厂商之间的竞争也愈加白热化,加上国内对知识产权的不够重视、山寨模仿产品的横行。保护源代码、保证企业的核心竞争力,成为众多软件研发企业的第一要务。那么企业应该如…