0x02.Redis 集群的实现原理是什么?
回答重点
Redis 集群(Redis cluster)是通过多个 Redis 实例组成的,每个主节点实例负责存储部分的数据,并且可以有一个或多个从节点作为备份。
具体是采用哈希槽(Hash Slot)机制来分配数据,将整个键空间划分为 16384 个槽(slots)。每个 Redis 主节点实例负责一定范围的哈希槽,数据的 key 经过 CRC16-CCITT 哈希算法计算后对 16384 取余即可定位到对应的节点。
客户端在发送请求时,会通过集群的任意节点进行连接,如果该节点存储了对应的数据则直接返回,反之该节点会根据请求的键值计算哈希槽并路由到正确的节点。现代 Redis 客户端通常会缓存槽位映射信息,避免频繁重定向。
简单来说,集群就是通过多台机器分担单台机器上的压力,同时通过主从复制提供高可用性。
扩展知识
Redis 集群中节点之间的信息如何同步?
Redis 集群内每个节点都会保存集群的完整拓扑信息,包括每个节点的 ID、IP 地址、端口、负责的哈希槽范围等。
节点之间使用 Gossip 协议进行状态交换,以保持集群的一致性和故障检测。每个节点会周期性地发送 PING 和 PONG 消息,交换集群信息,使得集群信息得以同步。
Gossip 的优点:
- 最终一致性:Gossip 协议能够在一段时间后使集群信息达成一致,虽然传播速度不如中心化方案快,但网络开销更小。
- 降低网络负担:由于信息是以随机节点间的对话方式传播,避免了集中式的状态查询,从而降低了网络流量。
Gossip 协议
Gossip 主要特点:
- 分布式信息传播:每个节点定期向其他节点发送其状态信息,确保所有节点对集群的状态有一致的视图。
- 低延迟和高效率:Gossip 协议设计为轻量级的通信方式,能够快速传播信息,减少单点故障带来的风险。
- 去中心化:没有中心节点,所有节点平等地参与信息传播,提高了系统的鲁棒性。
工作原理:
- 状态报告:每个节点在特定的时间间隔内,向随机选择的其他节点发送其自身的状态信息,包括节点的主从关系、槽位分布等。
- 信息更新:接收到状态信息的节点会根据所接收到的数据更新自己的状态,并将更新后的状态继续传播给其他节点。
- 节点检测:通过周期性交换状态信息,节点可以检测到其他节点的存活状态。如果某个节点未能在预定时间内响应,则该节点会被标记为故障节点。
- 容错处理:在检测到节点故障后,集群中的其他节点可以采取措施(如重新分配槽位)以保持系统的高可用性。
Redis 集群分片原理图示
Redis 集群会将数据分散到 16384(2^14)个哈希槽中,集群中的每个主节点负责一定范围的哈希槽,在 Redis 集群中,使用 CRC16-CCITT 哈希算法计算键的哈希槽,以确定该键应存储在哪个节点。
集群哈希槽分片如下图所示:
每个节点会拥有一部分的槽位,然后对应的键值会根据其本身的 key,映射到一个哈希槽中,其主要流程如下:
- 根据键值的 key,按照 CRC16-CCITT 算法计算一个 16 bit 的值,然后将 16 bit 的值对 16384 进行取余运算,最后得到一个对应的哈希槽编号。
- 值得注意的是,Redis 支持哈希标签(Hash Tags)机制,即如果键名中包含 “{…}” 格式的内容,那么只有花括号内的内容会被用来计算哈希槽,这样可以确保相关联的键被分配到同一个槽中。
- 根据每个节点分配的哈希槽区间,对应编号的数据落在对应的区间上,就能找到对应的分片实例。
为了方便大家理解,我这里画一个对应的关系图,以三个节点为例:
Redis 哈希槽映射图
这里还有一点需要强调下,Redis 客户端可以访问集群中任意一台实例,正常情况下这个实例包含这个数据
但如果槽被转移了,客户端还未来得及更新槽的信息,当前实例没有这个数据,则返回 MOVED 响应给客户端,将其重定向到对应的实例(因 Gossip 协议确保集群内每个节点都会保存集群的完整拓扑信息)。
Redis 集群中存储 key 示例
假设我们有一个 Redis 集群,包含三个主节点(Node1、Node2、Node3),它们分别负责以下哈希槽:
- Node1: 哈希槽 0-5460
- Node2: 哈希槽 5461-10922
- Node3: 哈希槽 10923-16383
现在要存储一个键为 user:1001
的数据。
计算哈希槽
- 使用 CRC16-CCITT 哈希算法计算
user:1001
的 CRC16 值。 - 假设计算结果为 12345。
- 然后,计算该值对应的哈希槽:
- 哈希槽 = 12345 % 16384 = 12345。
确定目标节点
- 12345 落在 Node3 的负责范围(10923-16383),因此,
user:1001
会被存储在 Node3 中。
Redis 集群中请求 key 示例(客户端直接连接的并不是对应 key 的节点)
如果客户端连接的是集群的 Node1,但需要访问存储在 Node3 的键 user:1001
,查询过程如下:
查询过程
1)计算哈希槽:
- 客户端使用 CRC16-CCITT 算法计算
user:1001
的哈希值(假设为 12345)。 - 计算哈希槽:12345 % 16384 = 12345。
2)查询请求:
- 因为客户端连接的是集群中的 Node1,所以客户端发送查询命令
GET user:1001
到 Node1。
3)Node1 响应:
- Node1 检测到请求的键
user:1001
属于 Node3,返回一个MOVED
错误,指示客户端请求的键在另一个节点上。MOVED
错误中会返回目标节点的信息(例如,Node3 的 IP 和端口)。
4)客户端处理:
- 现代 Redis 客户端会缓存此槽位映射信息,后续对该槽的请求会直接发送到正确的节点,避免重定向。
- 第一次收到 MOVED 错误时,客户端会连接到目标节点并更新槽位映射缓存。
5)发送查询请求到正确节点:
- 客户端向 Node3 发送
GET user:1001
。
6)获取结果:
- Node3 查询到
user:1001
的值(假设为{"name": "stormsha", "age": 16}
),并返回结果。
为什么 Redis 哈希槽节点的数目是 16384 呢?
1)首先是消息大小的考虑。
正常的心跳包需要带上节点完整配置数据,心跳还是比较频繁的,所以需要考虑数据包的大小,如果使用 16384 数据包只要约 2KB,如果用了 65536 则需要约 8KB。
实际上槽位信息使用一个长度为 16384 位的位图(bitmap)来表示,节点拥有哪个槽位,就将对应位置的位设置为 1,否则为 0。
Redis 心跳消息(CLUSTERMSG)数据结构如下所示:
typedef struct {char sig[4]; /* 信息标识 */uint32_t totlen; /* 消息总长度 */uint16_t ver; /* 协议版本 */uint16_t type; /* 消息类型, 用于区分meet,ping,pong等消息 */uint16_t count; /* 消息体包含的节点数量, 仅用于meet,ping,pong消息类型*/uint64_t currentEpoch; /* 当前发送节点的配置纪元 */uint64_t configEpoch; /* 主节点/从节点的主的配置纪元 */char sender[CLUSTER_NAMELEN]; /* 发送节点的nodeId */unsigned char myslots[CLUSTER_SLOTS/8]; /* 发送节点负责的槽信息 */char slaveOf[CLUSTER_NAMELEN]; /* 如果是从节点,记录主节点的nodeId */uint16_t port; /* 端口号 */uint16_t flags; /* 发送节点标识,区分主从角色,是否下线等 */unsigned char state; /* 发送节点的集群状态 */unsigned char mflags[3]; /* 消息标识 */union clusterMsgData data /* 消息正文 */;
} clusterMsg;
这里我们看到一个重点,即在消息头中最占空间的是 myslots[CLUSTER_SLOTS/8]
:
- 当槽位为 65536 时,这部分大小: 65536÷8=8192 字节 ≈8KB
- 当槽位为 16384 时,这部分大小: 16384÷8=2048 字节 ≈2KB
如果槽位为 65536,这个心跳消息的头部就太大了,在高频率通信的集群环境中会显著增加网络负担。
2)集群规模的考虑。
根据 Redis 作者的说明,集群不太可能会扩展超过 1000 个节点,而每个主节点应该管理相当数量的哈希槽。如果使用 16384 个槽位:
- 100 个节点集群:平均每个节点管理约 164 个槽位
- 1000 个节点集群:平均每个节点管理约 16 个槽位
这个数量既能满足大多数集群规模需求,又不会因为槽位过少而影响数据分布均衡性。
3)内存占用的平衡
Redis 作为内存数据库,对内存使用的效率非常关注。16384 个槽位的设计在集群功能和资源消耗之间取得了很好的平衡:足够多的槽位保证良好的数据分布,同时槽位映射的内存占用和网络传输开销都保持在合理范围内。
好的,以下是测试题目与解析部分分开的版本:
✅ Redis 集群选择题(共 4 题)
1. Redis 集群采用什么机制来分配数据到不同的节点? ( )
A. 哈希槽机制
B. 主备机制
C. 哈希链机制
D. 分段机制
2. Redis 集群中有多少个哈希槽? ( )
A. 2048
B. 8192
C. 16384
D. 32768
3. Redis 集群中的节点之间使用什么协议进行状态同步和故障检测? ( )
A. TCP/IP 协议
B. HTTP 协议
C. UDP 协议
D. Gossip 协议
4. 在 Redis 集群中,当客户端请求的键值对不在连接的节点上时,返回的错误类型是什么? ( )
A. ERROR
B. MOVED
C. NOT_FOUND
D. FORBIDDEN
📘 答案与解析
1. 正确答案:A
解析:Redis 集群通过哈希槽机制进行数据分配,避免单点瓶颈,将键映射到 16384 个槽中,再分配到不同节点。
2. 正确答案:C
解析:Redis 集群采用固定的 16384 个哈希槽,这个值是 2¹⁴,设计用于在带宽与灵活性之间做出平衡。
3. 正确答案:D
解析:Redis 集群使用 Gossip 协议实现去中心化状态同步和故障检测,各节点定期交换信息。
4. 正确答案:B
解析:当客户端请求的 key 不在当前节点时,Redis 返回 MOVED 重定向错误,引导客户端访问正确节点。
相关文章:
0x02.Redis 集群的实现原理是什么?
回答重点 Redis 集群(Redis cluster)是通过多个 Redis 实例组成的,每个主节点实例负责存储部分的数据,并且可以有一个或多个从节点作为备份。 具体是采用哈希槽(Hash Slot)机制来分配数据,将整…...
游戏引擎学习第219天
游戏运行时的当前状态 目前的工作基本上就是编程,带着一种预期,那就是一切都会很糟糕,而我们需要一个系统来防止它变得更糟。接下来,我们来看看目前的进展。 简要说明昨天提到的无限调试信息存储系统 昨天我们完成了内存管理的…...
二叉树深度解析:从基础概念到算法实现与应用
一、二叉树的本质定义与核心特性 (一)递归定义与逻辑结构 二叉树是一种 严格有序的树结构,其递归定义为: 空树:不含任何结点的集合,是二叉树的特殊形态。非空二叉树:由以下三部分组成&#x…...
Model Context Protocol(MCP)模型上下文协议
Model Context Protocol(MCP)模型上下文协议 前言一、什么是MCP二、MCP的作用三、MCP与Function call对比四、构建一个简单的MCP DEMO环境准备实现MCP Server运行 ServerMCP Client端配置验证 总结 前言 在Agent时代,将Agent确立为大模型未来…...
代码随想录算法训练营第十六天
LeetCode题目: 530. 二叉搜索树的最小绝对差501. 二叉搜索树中的众数236. 二叉树的最近公共祖先3272. 统计好整数的数目(每日一题) 其他: 今日总结 往期打卡 530. 二叉搜索树的最小绝对差 跳转: 530. 二叉搜索树的最小绝对差 学习: 代码随想录公开讲解 问题: 给你一个二叉搜…...
类似东郊到家的上门按摩预约服务系统小程序APP源码全开源
🔥 为什么上门按摩正在席卷全国? 万亿蓝海市场爆发 2024年中国按摩市场规模突破8000亿,上门服务增速达65% 90后成消费主力,**72%**白领每月至少使用1次上门按摩(数据来源:艾媒咨询) 传统痛点…...
MySQL 5.7.30 Linux 二进制安装包详解及安装指南
MySQL 5.7.30 Linux 安装包详解 mysql-5.7.30-linux-glibc2.12-x86_64.tar 是 MySQL 服务器 5.7.30 版本的 Linux 二进制发行包。 mysql-5.7.30-linux-glibc2.12-x86_64.tar 安装包下载 链接:https://pan.quark.cn/s/2943cd209ca5 包信息 版本: MySQL 5.7.30 平…...
C语言超详细指针知识(二)
在上一篇有关指针的博客中,我们介绍了指针的基础知识,如:内存与地址,解引用操作符,野指针等,今天我们将更加深入的学习指针的其他知识。 1.指针的使用和传址调用 1.1strlen的模拟实现 库函数strlen的功能是…...
Java集合框架详解:核心类、使用场景与最佳实践
文章目录 一、Java集合框架概览二、核心集合类详解1. List接口(有序、可重复)**ArrayList****LinkedList****List对比表** 2. Set接口(无序、唯一)**HashSet****TreeSet****Set对比表** 3. Queue接口(队列)…...
模板引擎语法-标签
模板引擎语法-标签 文章目录 模板引擎语法-标签[toc]一、用于进行判断的{% if-elif-else-endif %}标签二、关于循环对象的{% for-endfor %}标签三、关于自动转义的{% autoescape-endautoescape %}标签四、关于循环对象的{% cycle %}标签五、关于检查值是否变化的{% ifchange %}…...
刘火良FreeRTOS内核实现与应用学习之7——任务延时列表
在《刘火良FreeRTOS内核实现与应用学习之6——多优先级》的基础上:关键是添加了全局变量:xNextTaskUnblockTime ,与延时列表(xDelayedTaskList1、xDelayedTaskList2)来高效率的实现延时。 以前需要在扫描就绪列表中所…...
基于红外的语音传输及通信系统设计
标题:基于红外的语音传输及通信系统设计 内容:1.摘要 本设计聚焦于基于红外的语音传输及通信系统,以解决传统通信方式在特定场景下的局限性为背景,旨在开发一种高效、稳定且具有一定抗干扰能力的语音传输系统。方法上,采用红外技术作为语音信…...
解锁AI未来,开启创新之旅——《GPTs开发详解》与《ChatGPT 4应用详解》两本书的深度解析
前言 在这个数字化时代,AI技术正在以前所未有的速度改变我们的生活和工作方式。作为一名AI爱好者和从业者,我深知了解并掌握先进技术的重要性。今天,我想向大家推荐两本极具价值的书籍:《GPTs开发详解》和《ChatGPT 4应用详解》。…...
Linux进程通信入门:匿名管道的原理、实现与应用场景
Linux系列 文章目录 Linux系列前言一、进程通信的目的二、进程通信的原理2.1 进程通信是什么2.2 匿名管道通讯的原理 三、进程通讯的使用总结 前言 Linux进程间同通讯(IPC)是多个进程之间交换数据和协调行为的重要机制,是我们学习Linux操作系…...
[SpringMVC]上手案例
创建工程 新建项目,选择maven工程,原型(Archetype)选择maven的webapp,注意名称头尾。会使用到tomcat(因为是javaWeb)。 新建的项目结构目录如下,如果没有java目录,需要自…...
kubernetes 入门篇之架构介绍
经过前段时间的学习和实践,对k8s的架构有了一个大致的理解。 1. k8s 分层架构 架构层级核心组件控制平面层etcd、API Server、Scheduler、Controller Manager工作节点层Kubelet、Kube-proxy、CRI(容器运行时接口)、CNI(网络插件&…...
说一说 Spring 中的事务
什么是事务? 事务就是用户定义的一系列执行SQL语句的操作, 这些操作要么完全地执行,要么完全地都不执行, 它是一个不可分割的工作执行单元。 Spring 中的事务是怎么实现的? Spring事务底层是基于数据库事务和AOP机制的首先对于…...
docker容器安装的可道云挂接宿主机的硬盘目录:解决群晖 威联通 飞牛云等nas的硬盘挂接问题
基于Docker部署可道云(KodCloud)时,通过挂载宿主机其他磁盘目录可实现高效、安全的数据管理。具体而言,使用绑定挂载(Bind Mounts)将宿主机目录(如/data/disk2)映射到容器内的可道云…...
Oracle 23ai Vector Search 系列之5 向量索引(Vector Indexes)
文章目录 Oracle 23ai Vector Search 系列之5 向量索引Oracle 23ai支持的向量索引类型内存中的邻居图向量索引 (In-Memory Neighbor Graph Vector Index)磁盘上的邻居分区矢量索引 (Neighbor Partition Vector Index) 创建向量索引HNSW索引IVF索引 向量索引示例参考 Windows 环…...
GPT模型架构与文本生成技术深度解析
核心发现概述 本文通过系统分析OpenAI的GPT系列模型架构,揭示其基于Transformer解码器的核心设计原理与文本生成机制。研究显示,GPT模型通过自回归机制实现上下文感知的序列生成,其堆叠式解码器结构配合创新的位置编码方案,可有效…...
【读者求助】如何跨行业进入招聘岗位?
文章目录 读者留言回信岗位细分1. 中介公司的招聘岗位2. 猎头专员3. 公司的招聘专员选择建议 面试建议1. 请简单介绍你过去 3 年的招聘工作经历,重点说下你负责的岗位类型和规模2. 你在招聘流程中最常用的渠道有哪些?如何评估渠道效果?3. 当你…...
2025蓝桥杯省赛C++B组解题思路
由于题面还没出来,现在先口胡一下思路 填空题直接打表找规律或者乱搞一下就能出,从大题开始说。 1,题意: 给你一个数组,这个数组里有几个数可以被一个连续递增的数字区间求和得出 思路:诈骗题,显…...
springcloud整理
问题1.服务拆分后如何进行服务之间的调用 我们该如何跨服务调用,准确的说,如何在cart-service中获取item-service服务中的提供的商品数据呢? 解决办法:Spring给我们提供了一个RestTemplate的API,可以方便的实现Http请…...
游戏引擎学习第220天
介绍 今天的工作主要是进行一些代码整理和清理,目的是将我们之前写过的代码重新整合在一起,使它们能够更好地协同工作。现在的阶段,我们的任务并不是进行大规模的功能开发,而是集中精力对现有的代码进行整合和思考,确…...
OceanBase企业版单机部署:obd命令行方式
OceanBase企业版单机部署:obd命令行方式 安装包准备服务器准备最低资源配置是否部署ODP组件?仲裁服务器 服务器配置操作系统内核参数BIOS设置磁盘挂载网卡设置 obd部署前配置obd部署单机版安装obd配置obd部署OB集群部署后检查 环境清理与集群销毁 本文介…...
KWDB创作者计划—KWDB认知引擎:数据流动架构与时空感知计算的范式突破
引言:数据智能的第三范式 在数字化转型进入深水区的2025年,企业数据系统正面临三重悖论:数据规模指数级增长与实时决策需求之间的矛盾、多模态数据孤岛与业务连续性要求之间的冲突、静态存储范式与动态场景适配之间的鸿沟。KWDB(K…...
车载通信系统中基于ISO26262的功能安全与抗辐照协同设计研究
摘要:随着智能网联汽车的快速发展,车载通信系统正面临着功能安全与抗辐照设计的双重挑战。在高可靠性要求的车载应用场景下,如何实现功能安全标准与抗辐照技术的协同优化,构建满足ISO26262安全完整性等级要求的可靠通信架构&#…...
Oracle OCP认证考试考点详解083系列03
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 11. 第11题: 题目 解析及答案: 关于 RMAN(恢复管理器)多路复用备份集,以下哪…...
Spring
一.Ioc&DI 1.类的五种控制反转注解 这五个注解作用都一样,只是意义不一样,用来提高代码的可读性。 Controller:控制层,接收请求,对请求进⾏处理,并进⾏响应。 Servie:业务逻辑层࿰…...
基于开源链动2+1模式、AI智能名片与S2B2C商城小程序源码的体验式关系深化与商业转化研究
摘要:本文探讨了通过体验过程中的共同经历强化关系,促使KOC(关键意见消费者)为品牌背书的机制,并深入分析了开源链动21模式、AI智能名片以及S2B2C商城小程序源码在其中的创新应用。研究发现,这些新模式和技…...
【区块链安全 | 第三十九篇】合约审计之delegatecall(一)
文章目录 外部调用函数calldelegatecall call 与 delegatecall 的区别示例部署后初始状态调用B.testCall()函数调用B.testDelegatecall()函数区别总结 漏洞代码代码审计攻击代码攻击原理解析攻击流程修复建议审计思路 外部调用函数 在 Solidity 中,常见的两种底层外…...
Kingbase 常用运维命令总结
一、数据库连接与基础操作 连接指定服务器数据库 ksql -h 主机IP -p 端口号 -U 用户名 -d 数据库名 -W # 示例:连接 IP 为 192.168.1.100 的数据库 ksql -h 192.168.1.100 -p 54321 -U system -d test -W 断开数据库连接 \q 或 exit 查看数据库列表及详细信息…...
从零开始的C++编程 2(类和对象下)
目录 1.构造函数初始化列表 2.类型转换 3.static成员 4.友元 5.内部类 6.匿名对象 1.构造函数初始化列表 ①之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,初始化…...
Java---抽象类与接口
抽象类与接口 前言一、抽象类1.抽象类的概念2.抽象类的语法3.抽象类的特点4.抽象类的操作5.抽象类的作用 二、接口1.接口的概念2.接口语法3.接口的使用与特性4.实现多个接口5.接口之间的继承6.接口的实例(1).对象大小的比较(1).Comparable接口(2).Comparator接口 (2).实现类的克…...
玩转Docker | 使用Docker部署linkding书签管理工具
玩转Docker | 使用Docker部署linkding书签管理工具 前言一、linkding介绍简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署linkding服务下载镜像创建容器检查容器状态检查服务端口设置登录账号与密码安全设置四、访问linkding服务访问linkding…...
K8s 集群网络疑难杂症:解决 CNI 网络接口宕机告警的完整指南
引言 在 Kubernetes 集群运维过程中,网络问题往往是最棘手的故障之一。当你收到一条 [CRITICAL] 网络接口宕机 (172.18.109.55:9100) 的告警,并且告警内容显示 172.18.109.55:9100 的网络接口 cni0 已宕机5分钟 时,这通常意味着你的 Kubernetes 集群中有一个节点的容器网络…...
程序员/运维绘图工具---Mermaid
效果 介绍 Mermaid 是一种基于文本的图表生成工具,通过类似 Markdown 的简洁语法快速创建流程图、甘特图、类图等各类专业图表 应用场景 程序员绘图 系统架构图&代码逻辑可视化 项目管理图 数据可视化 AI辅助生成:LLM生成mermaid代码然后去渲染成…...
《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-用MATLAB画一朵会动的3D玫瑰:从零开始的浪漫编程之旅
《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-🌹用MATLAB画一朵会动的3D玫瑰:从零开始的浪漫编程之旅 你是否想过用代码创造一朵永不凋谢的玫瑰?今天,我将带你走进MATLAB的奇妙世界,用数学公式和编…...
激光院董事长龚赤坤到北京研发中心检查指导工作
4月11日,激光院党委书记、董事长龚赤坤到北京研发中心检查指导工作。 龚赤坤详细了解了北京研发中心的建设情况和科研进展,充分肯定所取得的成绩,对发展寄予厚望,龚赤坤指出北京研发中心的成立正处于激光院加速发展与产业进化的关…...
AbortController:让异步操作随时说停就停
AbortController:让异步操作随时说停就停 一、什么是 AbortController? AbortController 是 JavaScript 在浏览器和部分 Node.js 环境中提供的全局类,用来中止正在进行或待完成的异步操作(如 fetch() 请求、事件监听、可写流、数…...
leetcode572 另一棵树的子树
1.与100、101解法相同 递归: class Solution { private:bool compare(TreeNode* p, TreeNode* q){if(!p && !q) return true;else if(!p || !q) return false;else if(p->val ! q->val) return false;bool leftside compare(p->left, q->lef…...
再看 MPTCP 时的思考
2022 年夏,居家办公时,第一次接手 mptcp 就觉得它不靠谱,以至于我后来搞了 mpudp for DC,再后来我调研了很多 mptcp-based 方案,发现它们都是向善而来,最终灰头土脸而终。mptcp 实则一个坑,业内…...
将三维非平面点集拆分为平面面片的MATLAB实现
将三维非平面点集拆分为平面面片的MATLAB实现 要将三维空间中不在同一平面上的点集拆分为多个平面面片,可以采用以下几种方法: 1. 三角剖分法 (Delaunay Triangulation) 最简单的方法是将点集进行三角剖分,因为三个点总是共面的࿱…...
Python(10.2)Python可变与不可变类型内存机制解密:从底层原理到工程实践
目录 一、类型特性引发的内存现象1.1 电商促销活动事故分析1.2 内存机制核心差异 二、内存地址追踪实验2.1 基础类型验证2.2 复合对象实验 三、深度拷贝内存分析3.1 浅拷贝陷阱3.2 深拷贝实现 四、函数参数传递机制4.1 默认参数陷阱4.2 安全参数模式 五、内存优化最佳实践5.1 字…...
华为hcie证书的有效期怎么判断?
在ICT行业,华为HCIE证书堪称含金量极高的“敲门砖”,拥有它往往意味着在职场上更上一层楼。然而,很多人在辛苦考取HCIE证书后,却对其有效期相关事宜一知半解。今天,咱们就来好好唠唠华为HCIE证书的有效期怎么判断这个关…...
【前端】CSS Grid 布局详解
CSS Grid 布局详解(通俗易懂版) 一、概述 CSS Grid 是一种二维布局系统,可以同时控制行和列,相比 Flex(一维布局),更适合用在整体页面布局或复杂模块结构中。 二、基础概念 Grid 容器&#x…...
物美“外贸转内销”极速绿色通道正式开启
「TMT星球」获悉,在国家“提振消费、扩大内需”及“内外贸一体化”战略指引下,物美集团依托自身零售生态优势,打造“云超绿通”专项通道,助力中国优质外贸企业实现“出口转内销”的高效转型,通过极速绿通、线上线下全渠…...
【说明书#1】Node.js 和 npm安装与使用
系统提示 npm 不是内部或外部命令,也不是可运行的程序或批处理文件,也就是 npm 命令无法识别。这个错误通常是因为 Node.js 和 npm 没有正确安装,或者它们的路径没有添加到系统的环境变量中。 解决方法如下: 1. 安装 Node.js 和 npm: 如果你还没有安装 Node.js,可以从…...
【触想智能】安卓工业平板电脑和普通商业平板电脑的区别
安卓工业平板电脑是基于ARM架构开发的一种工业平板电脑,它在自助终端、智能制造、产线车间、智慧物流、商业金融等诸多领域有着广泛的应用。 触想安卓工业平板电脑TPC-A2系列 安卓工业平板电脑和普通商业平板电脑在一些方面存在一些区别,包括设计、硬件规…...
Java基于SSM的课程答疑微信小程序【附源码、文档说明】
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...