Redis学习【11】之分布式系统
文章目录
- 一 数据分区算法
- 1.1 顺序分区
- 1.1.1 轮询分区算法
- 1.1.2 时间片轮转分区算法
- 1.1.3 数据块分区算法
- 1.1.4 业务主题分区算法
- 1.2 哈希分区
- 1.2.1 节点取模分区算法
- 1.2.2 一致性哈希分区算法
- 1.2.3 虚拟槽分区算法
- 二 分布式系统环境搭建与运行
- 2.1 系统搭建
- 2.1.1 系统架构
- 2.1.2 删除持久化文件
- 2.1.3 创建目录
- 2.1.4 复制 2 个配置文件
- 2.1.5 修改 redis.conf
- 2.1.6 修改 redis6380.conf
- 2.1.7 复制 5 个配置文件
- 2.1.8 修改 5 个配置文件
- 2.2 系统启动与关闭
- 2.2.1 启动节点
- 2.2.2 创建分布式系统
- 2.2.3 测试系统
- 2.2.4 关闭系统
- 三 集群操作
- 3.1 连接集群
- 3.2 写入数据
- 3.2.1 key 单个写入&批量操作
- 3.3 集群查询
- 3.3.1 查询 key 的 slot
- 3.3.2 查询 slot 中 key 的数量
- 3.3.3 查询 slot 中的 key
- 3.4 故障转移
- 3.4.1 故障转移
- 3.4.2 全覆盖需求
- 四 分布式系统的限制
- Redis 分布式系统【Redis Cluster Redis 集群】是 Redis 3.0 开始推出的分布式解决方案。其可以很好地解决不同 Redis 节点存放不同数据,并将用户请求方便地路由到不同 Redis 的问题。
一 数据分区算法
- 分布式数据库系统会根据不同的数据分区算法,将数据分散存储到不同的数据库服务器节点上,每个节点管理着整个数据集合中的一个子集。
1.1 顺序分区
- 顺序分区规则可以将数据按照某种顺序平均分配到不同的节点。不同的顺序方式,产生了不同的分区算法。
- 如:轮询分区算法、时间片轮转分区算法、数据块分区算法、业务主题分区算法等
1.1.1 轮询分区算法
- 每产生一个数据,就依次分配到不同的节点。该算法适合于数据问题不确定的场景。
- 优点:在数据总量非常庞大的情况下,每个节点中数据是很平均的
- 缺点:生产者与数据节点间的连接要长时间保持
1.1.2 时间片轮转分区算法
- 在某固定长度的时间片内的数据都会分配到一个节点。时间片结束,再产生的数据就会被分配到下一个节点。这些节点会被依次轮转分配数据。
- 优点:生产者与节点间的连接只需占用当前正在使用的,其它连接使用完毕后就立即释放。
- 缺点:该算法可能会出现节点数据不平均的情况(因为每个时间片内产生的数据量可能是不同的)。
1.1.3 数据块分区算法
- 在整体数据总量确定的情况下,根据各个节点的存储能力,可以将连接的某一整块数据分配到某一节点
1.1.4 业务主题分区算法
- 数据可根据不同的业务主题,分配到不同的节点
1.2 哈希分区
- 哈希分区规则是充分利用数据的哈希值来完成分配,对数据哈希值的不同使用方式产生了不同的哈希分区算法。
1.2.1 节点取模分区算法
- 该算法的前提是,每个节点都已分配好了一个唯一序号,对于 NNN 个节点的分布式系统,其序号范围为[0,N−1][0, N-1][0,N−1]。然后选取数据本身或可以代表数据特征的数据的一部分作为keykeykey,计算 hash(key)hash(key)hash(key)与节点数量NNN的模,该计算结果即为该数据的存储节点的序号。
- 该算法最大的优点是简单,但缺点是其也存在较严重的不足。如果分布式系统扩容或缩容,已经存储过的数据需要根据新的节点数量NNN进行数据迁移,否则用户根据 key 是无法再找到原来的数据的。生产中扩容一般采用翻倍扩容方式,以减少扩容时数据迁移的比例。
1.2.2 一致性哈希分区算法
-
一致性 hashhashhash 算法通过一个叫作一致性hashhashhash环的数据结构实现。这个环的起点是 000,终点是 232−12^32-1232−1,并且起点与终点重合。环中间的整数按逆/顺时针分布,故这个环的整数分布范围是[0,232−1][0, 2^32-1][0,232−1]。
-
上图中存在四个对象 o1、o2、o3、o4o1、o2、o3、o4o1、o2、o3、o4,分别代表四个待分配的数据,红色方块是这四个数据的 hash(o)hash(o)hash(o)在 Hash 环中的落点。同时,图上还存在三个节点 m0、m1、m2m_0、m_1、m_2m0、m1、m2的主机结点,绿色圆圈是这三节点的 hash(m)hash(m)hash(m)在 Hash 环中的落点。
-
现在要为数据分配其要存储的节点。该数据对象的 hash(o) 按照逆/顺时针方向距离哪个节点的 hash(m)最近,就将该数据存储在哪个节点。这样就会形成上图所示的分配结果。
-
该算法的优点是:节点的扩容与缩容,仅对按照逆/顺时针方向距离该节点最近的节点有影响,对其它节点无影响。
- 如下图:在原来的基础上添加m3m_3m3的主机结点,对o3o_3o3的数据进行迁移
- 如下图:在原来的基础上添加m3m_3m3的主机结点,对o3o_3o3的数据进行迁移
-
当节点数量较少时,容易形成数据倾斜问题,且节点变化影响的节点数量占比较大,即影响的数据量较大。所以该方式不适合数据节点较少的场景。
1.2.3 虚拟槽分区算法
- 该算法首先虚拟出一个固定数量的整数集合,该集合中的每个整数称为一个 slot 槽。这个槽的数量一般是远远大于节点数量的,然后再将所有 slot 槽平均映射到各个节点之上。Redis 分布式系统中共虚拟了 163841638416384 个 slot 槽,其范围为[0,16383][0, 16383][0,16383]。
- 例如,假设共有 3 个节点,那么 slot 槽与节点间的映射关系如下图所示:
- 而数据只与 slot 槽有关系,与节点没有直接关系。数据只通过其 key 的 hash(key)映射到slot 槽:slot=hash(key)%slotNumsslot=hash(key) \% slotNumsslot=hash(key)%slotNums。该算法的一个优点,解耦了数据与节点,客户端无需维护节点,只需维护与 slot 槽的关系即可。
- Redis 数据分区采用的就是该算法。其计算槽点的公式为:slot=CRC16(key)%16384slot = CRC16(key) \% 16384slot=CRC16(key)%16384。CRC16()CRC16()CRC16()是一种带有校验功能的、具有良好分散功能的、特殊的 hash 算法函数。
- 其实 Redis中计算槽点的公式不是上面的那个,而是:KaTeX parse error: Expected 'EOF', got '&' at position 19: …t = CRC16(key) &̲16383。若要计算 a%ba\%ba%b,如果 b 是 2 的整数次幂,那么 KaTeX parse error: Expected 'EOF', got '&' at position 12: a \% b = a &̲ (b-1)。
二 分布式系统环境搭建与运行
2.1 系统搭建
- 这部分的内容,作者主要讲解操作和原理,所以对代码及操作的的实际操作结果展示内容会减少,但主要的步骤还是会保留下来!
2.1.1 系统架构
- 要搭建的 Redis 分布式系统由 6 个节点构成,这 6 个节点的地址及角色分别如下表所示。一个 master 配备一个 slave,master 与 slave 的配对关系,在系统搭建成功后会自动分配。
2.1.2 删除持久化文件
- 先将之前“Redis 主从集群”中在 Redis 安装目录下生成的 RDB 持久化文件
dump638*.conf
与AOF
持久化文件删除。因为Redis
分布式系统要求创建在一个空的数据库之上。注意,AOF
持久化文件全部在appendonlydir
目录中。
# 在目录redis下操作
rm -rf dump638*.rdb appendonlydir
2.1.3 创建目录
- 在 Redis 安装目录中 mkdir 一个新的目录 cluster-dis,用作分布式系统的工作目录。
# 在目录redis下操作
mkdir cluster-dis
2.1.4 复制 2 个配置文件
- 将 cluster 目录中的
redis.conf
与redis6380.conf
文件复制到 cluster-dis 目录
# 在cluster-dis的操作命令
cp ../cluster/redisconf ./
cp ../cluster/redis6380.conf ./
2.1.5 修改 redis.conf
- 对于 redis.conf 配置文件,主要涉及到以下三个四个属性:
- dir
- 指定工作目录为前面创建的
cluster-dis
目录。持久化文件、节点配置文件将来都会在工作目录中自动生成。
- 指定工作目录为前面创建的
- cluster-enabled
- 该属性用于开启 Redis 的集群模式
- cluster-config-file
- 该属性用于指定“集群节点”的配置文件。该文件会在第一次节点启动时自动生成,其生成的路径是在 dir 属性指定的工作目录中。在集群节点信息发生变化后(如节点下线、故障转移等),节点会自动将集群状态信息保存到该配置文件中。
- cluster-node-timeout
- 用于指定“集群节点”间通信的超时时间阈值,单位毫秒
2.1.6 修改 redis6380.conf
include redis.conf
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
appendfilename appendonly6380.aof
replica-priority 90
cluster-config-file nodes-6380.conf
2.1.7 复制 5 个配置文件
- 使用 redis6380.conf 复制出 5 个配置文件
redis6381.conf、redis6382.conf、redis6383.conf、redis6384.conf、redis6385.conf
cp redis6380.conf redis6381.conf
cp redis6380.conf redis6382.conf
cp redis6380.conf redis6383.conf
cp redis6380.conf redis6384.conf
cp redis6380.conf redis6385.conf
2.1.8 修改 5 个配置文件
- 修改 5 个配置文件
redis6381.conf、redis6382.conf、redis6383.conf、redis6384.conf、redis6385.conf
的内容,将其中所有涉及的端口号全部替换为当前文件名称中的端口号。
2.2 系统启动与关闭
2.2.1 启动节点
- 第一种方式:手动启动
- 启动所有 Redis 节点
redis-server redis6380.conf redis-server redis6381.conf redis-server redis6382.conf redis-server redis6383.conf redis-server redis6384.conf redis-server redis6385.conf
- 第二种:编写脚本文件启动【该方法在伪集群中使用方便,真实生产环境不适用】
1. 在cluster-dis
中,创建文件start-redis-cluster.sh
vim start-redis-cluster.sh
2. 编写内容如下
#!/bin/bash rm -rf dump638*.rdb rm -rf appendonlydir rm -rf nodes-638*.conf redis-server redis6380.conf redis-server redis6381.conf redis-server redis6382.conf redis-server redis6383.conf redis-server redis6384.conf redis-server redis6385.conf
- 修改文件的权限
chmod 755 start-redis-cluster.sh
- 运行文件
./start-redis-cluster.sh
2.2.2 创建分布式系统
- 6 个节点启动后,它们仍是 6 个独立的 Redis,通过
redis-cli --cluster create
命令可将 6个节点创建了一个分布式系统。
- 该命令用于将指定的 6 个节点连接为一个分布式系统。
--cluster replicas 1
指定每个master 会带有一个slave
作为副本。
- 输入 yes 后回车,系统就会将以上显示的动态配置信息真正的应用到节点上,然后就可可看到如下日志
2.2.3 测试系统
- 通过
cluster nodes
命令可以查看到系统中各节点的关系及连接情况。能看到每个节点给出 connected,就说明分布式系统已经成功搭建。
redis-cli -c -p 6380 cluster nodes
- 对于客户端连接命令 redis-cli,需要注意两点:
- redis-cli 带有-c 参数,表示这是要连接一个“集群”,而非是一个节点。
- 端口号可以使用 6 个中的任意一个。
2.2.4 关闭系统
- 对于分布式系统的关闭,只需将各个节点 shutdown 即可
- 方法一:手动关闭
redis-cli -p 6380 shutdown
redis-cli -p 6381 shutdown
redis-cli -p 6382 shutdown
redis-cli -p 6383 shutdown
redis-cli -p 6384 shutdown
redis-cli -p 6385 shutdown
- 方法二:配置文件关闭
- 创建执行文件
shutdown-redis-cluster.sh
- 编写一下内容
#!/bin/bash redis-cli -p 6380 shutdown redis-cli -p 6381 shutdown redis-cli -p 6382 shutdown redis-cli -p 6383 shutdown redis-cli -p 6384 shutdown redis-cli -p 6385 shutdown # 查看关闭的效果指令 ps aux|grep redis
- 修改文件权限
chmode 755 shutdown-redis-cluster.sh
- 创建执行文件
三 集群操作
3.1 连接集群
- 与之前单机连接相比的唯一区别就是增加了参数-c。
redis-cli -c -p 6380
3.2 写入数据
3.2.1 key 单个写入&批量操作
- 无论 value 类型为 String 还是 List、Set 等集合类型,只要写入时操作的是一个 key,那么在分布式系统中就没有问题。
- 对一次写入多个 key 的操作,由于多个 key 会计算出多个 slot,多个 slot 可能会对应多个节点。而由于一次只能写入一个节点,所以该操作会报错。系统提供了一种对批量 key 的操作方案,为这些 key 指定一个统一的 group,让这个 group 作为计算 slot 的唯一值。
- 如:
mset name{emp} ming game{emp} kissking
3.3 集群查询
3.3.1 查询 key 的 slot
- 通过
cluster keyslot
可以查询指定 key 的slot
cluster keyslot xxx
3.3.2 查询 slot 中 key 的数量
- 通过
cluster countkeysinslot
命令可以查看到指定slot
所包含的key
的个数
cluster countkeysinslot xxx
3.3.3 查询 slot 中的 key
- 通过
cluster getkeysinslot
命令可以查看到指定 slot 所包含的key
cluster getkeysinslot xxx num
3.4 故障转移
3.4.1 故障转移
- 分布式系统中的某个
master
如果出现宕机,那么其相应的slave
就会自动晋升为master
。如果原master
又重新启动了,那么原master
会自动变为新master
的slave
。
3.4.2 全覆盖需求
- 如果某 slot 范围对应节点的 master 与 slave 全部宕机,那么整个分布式系统是否还可以对外提供读服务,就取决于属性
cluster-require-full-coverage
的设置。
- 该属性有两种取值:
- yes:默认值。要求所有 slot 节点必须全覆盖的情况下系统才能运行。
- no:slot 节点不全的情况下系统也可以提供查询服务。
四 分布式系统的限制
- Redis 的分布式系统存在一些使用限制:
- 仅支持 0 号数据库
- 批量 key 操作支持有限:需要指定GROUP不能跨槽存放
- 分区仅限于 key:即使VALUE是集合,也不能存放到不同的机器上。
- 事务支持有限:在一个主机上有作用,槽点分到不同主机上不起作用。
- 不支持分级管理:不支持分极管理,只有
master
和slave
相关文章:

Redis学习【11】之分布式系统
文章目录一 数据分区算法1.1 顺序分区1.1.1 轮询分区算法1.1.2 时间片轮转分区算法1.1.3 数据块分区算法1.1.4 业务主题分区算法1.2 哈希分区1.2.1 节点取模分区算法1.2.2 一致性哈希分区算法1.2.3 虚拟槽分区算法二 分布式系统环境搭建与运行2.1 系统搭建2.1.1 系统架构2.1.2 …...
光速c数列的猜想:光猜
光速c数列的猜想:光猜 2023-03-05 10:26:30 猜测:不同的宇宙光速c并不同 分成等级数列c0,c1,c2,...cn... 地球所处宇宙的真空光速c为c1,其中c0或许假设为光在纯水中速度乎 亦有可能仅有六级对应六道。 宇宙外,容器外也,超过光速c1,为光速c2,可看到容器…...
2023年全国最新交安安全员精选真题及答案12
百分百题库提供交安安全员考试试题、交安安全员考试预测题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 21.作业场所监督检查是安全生产监督管理的一种重要形式,作业场所监督…...
2023年全国最新安全员精选真题及答案14
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 81.(单选题)正常工作状态下,高处作业吊篮悬挂机构抗…...
让Vue响应Map或Set的变化操作,在vue中响应map和set数据结构,计算属性的用法,计算属性特点
明确一点 vue的响应式系统不支持Map和Set,也就是说,当Map与Set里面的元素变化时Vue追踪不到这些变化,因此无法做出响应。 如下demo其实是不会进行数据相应的 <h1 v-for"(item,index) in mySetAsList" :key"index"&…...

Unable to find a valid cuDNN algorithm to run convolution
Unable to find a valid cuDNN algorithm to run convolution 今天在复习HumanNerf的时候发现了这个报错, import torch print(torch.cuda.is_available()) 使用上面的代码发现GPU是可以用的,可自己的torch版本对应。 后面继续看帖子,总结有…...

Linux 进程:进程退出返回值的获取
目录一、对输出参数status的理解二、获取进程退出返回值1.位运算(1)异常退出码(2)进程返回值2.宏函数我们常使用函数 wait 和 waitpid 来执行进程等待的功能:处理退出的子进程并释放资源,防止子进程变成僵尸进程。而这两个函数都有一个输出参数status&am…...
JavaScript核心高级内容复习1
本节概述 数据类型的分类和判断 基本(值)类型 Number ----- 任意数值 -------- typeofString ----- 任意字符串 ------ typeofBoolean ---- true/false ----- typeofundefined — undefined ----- typeof/null -------- null ---------- 对象(引用)类型 Object ----- typeof…...

2D图像处理:Qt + Opencv使用光度立体法检测Halcon中提供的缺陷图像
文章目录 不需知道光源方向一、光度立体法(后续有时间在查资料研究)1.1 问题1:Slants和Tilts的理解(暂时是理解的)1.2 问题1:Gradient通道数为1,为何像素点对应的值会有两个?1.3 问题2:F(r,c)=(u(r,c),v(r,c)) 关于高斯曲率和平均曲率如何计算的?二、非标定光源实现光…...
怎样用sql去查一个订单表中一个店铺一段时间的营业收入的环比
一:思路 要查询一个订单表中一个店铺一段时间的营业收入的环比,可以按照以下步骤进行操作: 使用SELECT语句选择需要的数据列,如订单日期和订单金额,以及店铺名称列。 使用WHERE语句过滤出指定店铺和时间段的订单数据…...

SpringSecurity: 默认添加的15个Filter是怎么添加进去的?
总的流程分为两部分,一是先用Map把configurer收集起来,然后再把maper中所有的configurer应用到HttpSecurity对象。 其中的map位于AbstractConfiguredSecurityBuilder这个类。 private final LinkedHashMap<Class<? extends SecurityConfigurer&l…...

学习记录---latent code 潜在编码
文章目录参考文献1. 什么是潜在编码?2.什么是潜在空间?3.同类潜在编码的相似性4.潜在编码的应用4.1 Antoencoders4.2 Generative models5.结论个人学习总结,持续更新中……参考文献 [1] 快速理解深度学习中的latent code潜在编码 1. 什么是…...

Cesium三维数据格式以及生产流程详解(glb,osgb,obj,bim,ifc)等
最近收到私信问我在cesium上展示的一些三维数据是如何生产和处理的,这篇文章就给大家一次性讲个透彻。 首先我们来做做分类。市面上能接触到的,常见的,cesium上支持展示的三维数据大致分为以下几种: 1.倾斜摄影(osgb,obj) 2.点云数据(las,pts) 3.手工模型(gltf,…...
2023年备考信息安全工程师每日知识点(1)
信息安全工程师在软考中属于中级认证,难度尚可,如果从今天开始学的话,肯定来得及 作者简介: 吉林师范大学网络空间安全的一名普通的大一学生已于2022年拿到华为阿里腾讯三家认证吉师信网中心的一名可怜打工人华为MindSpore截至目…...
Unity记录3.1-地图-TileMap简单使用、鼠标拖动放置Tile
文章首发及后续更新:https://mwhls.top/4456.html,无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评,非常感谢! 汇总:Unity 记录 上章的课程接下来是巡逻的敌人…...

Decoupled Knowledge Distillation(CVPR 2022)原理与代码解析
paper:Decoupled Knowledge Distillationcode:https://github.com/megvii-research/mdistiller/blob/master/mdistiller/distillers/DKD.py背景与基于响应logits-based的蒸馏方法相比,基于特征feature-based的蒸馏方法在各种任务上的表现更好…...

IronWebScraper 2023.2.2 Crack
关于 .NET 的 IronWebScraper 用于从 HTML Web 应用程序中提取干净的结构化数据的 C# 框架。 IronWebScraper for .NET 是一个 C# 网络抓取库,它允许开发人员模拟和自动化人类浏览行为,以从 Web 应用程序中提取内容、文件和图像作为本机 .NET 对象。Iron…...
【2.1 golong中条件语句if】
1. 条件语句if 1.1.1. Go 语言条件语句: 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。 Go 语言提供了以下几种条件判断语句: 1.1…...
Scala编程(第四版)
Scala编程可伸缩的语言面向对象与函数式编程Scala优势Scala是兼容的可伸缩的语言 1、适合构建将java组件组装在一起的脚本 2、用于编写可复用组件,并讲这些组件构建成大型框架 Scala是一门综合面向对象和函数式编程概念的静态类型编程语言 面向对象与函数式编程 面…...

aws apigateway 基础概念和入门示例
参考资料 https://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/getting-started.html apigateway基础理解 apigateway的核心概念 apigateway,基础服务用来管理接口的创建,部署和管理restapi,http资源和方法的集合&#…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...