Redis设计与实现第17章 -- 集群 总结3(ASK错误、复制与故障转移、消息)
17.5 ASK错误
在进行重新分片期间,源节点向目标节点迁移一个槽的过程中,可能会出现这样一种情况:属于被迁移槽的一部分键值对保存在源节点里面,而另一部分键值对则保存在目标节点里面。当客户端向源节点发送一个与数据库键有关的命令,并且命令要处理的数据库键恰好就属于正在迁移的槽时:
源节点会先在自己的数据库里查找指定的键,如果找到的话,就直接执行客户端发送的命令
否则,这个键有可能已经被迁移到了目标节点,源节点向客户端返回一个ASK错误,指引客户端转向正在导入槽的目标节点,并再次发送之前想要执行的命令
和接到MOVED错误时的情况类似,集群模式的cli接到ASK错误时也不会打印错误,单机模式的才会。
17.5.1 CLUSTER SETCLOT IMPORTING命令的实现
clusterState结构的importing_slots_from数组记录了当前节点正在从其他节点导入的槽,如果importing_slots_from[i] 的值不为NULL,而是指向一个clusterNode结构,那么表示当前节点正在从clusterNode所代表的节点导入槽。
在对集群进行重新分片的时候,向目标节点发送命令:
CLUSTER SETSLOT IMPORTING <source_id> 可以将目标节点clusterState.importing_slots_from[i]的值设置为source_id所代表的节点的clusterNode结构。
17.5.2 CLUSTER SETSLOT MIGRATING 命令的实现
clusterState结构的migrating_slots_to数组记录了当前节点正在迁移至其他节点的槽,如果migrating_slots_to[i]的值不为NULL,而是指向一个clusterNode结构,那么表示当前节点正在将槽i迁移至clusterNode所代表的节点
在对集群重新分片的时候,向源节点发送命令,CLUSTER SETSLOT _ MIGRATING __ 可以将源节点 clusterState.migrating_slots_to[i]的值设置为target_id所代表节点的clusterNode结构 _
17.5.3 ASK错误
接到ASK错误的客户端会根据错误提供的IP地址和端口号,转向至正在导入槽的目标节点,首先向目标节点发送一个ASKING命令,之后再重新发送原本想要执行的命令
17.5.4 ASKING命令
唯一要做的就是打开发送该命令的客户端的REDIS_ASKING标识,即clients.flags |= REDIS_ASKING
一般情况下,如果客户端向节点发送一个关于槽i的命令,而槽i又没有指派给这个节点的话,那么节点将向客户端返回一个MOVED错误;但是如果节点的clusterState.importing_slots_from[i]显示节点正在导入槽,并且发送命令的客户端带有REDIS_ASKING标识,节点将破例执行这个关于槽i的命令一次
当客户端接收到ASK错误并转向至正在导人槽的节点时,客户端会先向节点发送一个ASKING命令,然后才重新发送想要执行的命令,这是因为如果客户端不发送ASKING命令,而直接发送想要执行的命令的话,那么客户端发送的命令将被节点拒绝执行,并返回MOVED 错误。
另外要注意的是,客户端的REDIS_ASKING标识是一个一次性标识,当节点执行了一个带有REDIS_ASKING标识的客户端发送的命令之后,客户端的REDIS_ASKING标识就会被移除。
17.5.5 ASK错误和MOVED错误的区别
MOVED错误代表槽的负责权已经从一个节点转移到了另一个节点,以后都会直接将命令请求发送至MOVED错误所指向的节点
ASK错误只是两个节点在迁移槽的过程中使用的一种临时措施:在客户端收到关于槽i的ASK错误之后,客户端只会在接下来的一次命令请求中将关于槽i的命令请求发送到ASK错误所指示的节点,但是今后仍旧发送到目前负责处理槽i的节点
17.6 复制与故障转移
Redis集群中的节点分为主节点master和从节点slave,其中主节点用于处理槽,从节点用于复制某个主节点,并在被复制的主节点下线时,代替下线主节点继续处理命令请求。
17.6.1 设置从节点
向一个节点发送命令 CLUSTER REPLICATE <node_id> 可以让接收命令的节点成为node_id所指定的从节点,并开始对主节点进行复制。
- 接收到命令的节点首先会在自己的clusterState.nodes字典中找到node_id所对应节点的clusterNode结构,并将自己的clusterState.myself.slaveof指针指向这个结构,以此来记录这个节点正在复制的主节点。
- 节点会修改自己clusterState.myself.flags中的属性,关闭原本的REDIS_NODE_MASTER标识,打开REDIS_NODE_SLAVE标识,表示这个节点已经由原来的主节点变成了从节点
- 节点调用复制代码,并根据clusterState.myself.slaveof指向的clusterNode结构所保存的IP地址和端口号,对主节点进行复制,相当于向从节点发送
SLAVEOF <master_ip> <master_port>
一个节点成为从节点,并开始复制某个主节点这一信息并通过信息发送给集群中的其他节点,最终集群中的所有节点都会知道某个从节点正在复制某个主节点。
集群中的所有节点都会在代表主节点的clusterNode结构的slaves属性和numslaves属性中记录正在复制这个主节点的从节点名单。
17.6.2 故障检测
集群中的每个节点都会定期地向集群中其他节点发送PING消息,以此来检测对方是否在线。如果接收PING消息的节点没有在规定的时间内,向发送PING消息的节点返回PONG消息,那么发送PING消息的节点就会将接收PING消息的节点标记为疑似下线PFAIL
集群中的各个节点会通过相互发消息的方式来交换集群中各个节点的状态信息,当一个主节点A通过消息得知主节点B认为主节点C进入了疑似下线状态时,主节点A会在自己的clusterState.nodes字典中找到主节点C对应的clusterNode结构,并将主节点B的下线报告添加到clsuterNode结构的fail_reports链表里。
每个下线报告由一个clusterNodeFailReport结构表示,包含一个clusterNode类型,表示报告目标节点已经下线的节点,还有一个mstime_t类型,表示最后一次从node节点收到下线报告的时间。
如果在一个集群里,半数以上负责处理槽的主节点都将某个主节点x报告未疑似下线,那么这个主节点x将被标记为已下线FAIL,将主节点x标记为已下线的节点会向集群广播一条关于主节点x的FAIL消息,所有收到这条FAIL消息的节点都会立即将主节点x标记为已下线。
17.6.3 故障转移
当一个从节点发现自己正在复制的主节点进入了已下线状态时,从节点将开始对下线主节点进行故障转移,以下是故障转移的执行步骤:
复制下线主节点的所有从节点里,会有一个从节点被选中
被选中的从节点会执行SLAVEOF no one命令,成为新的主节点
新主节点会撤销所有对已下线主节点的槽指派,并将这些槽全部指派给自己
新的主节点向集群广播一条PONG消息,这条PONG消息可以让集群中的其他节点立即知道这个节点已经由从节点变成了主节点,并且主节点已经接管了原本由已下线节点负责处理的槽
新的主节点开始接收和自己负责处理的槽有关的命令请求,故障转移完成
17.6.4 选举新的主节点
和选举领头Sentinel的方法很相似,都是基于Raft算法的领头选举
17.7 消息
集群中的各个节点通过发送和接收消息来进行通信,发送消息的节点叫发送者,接收消息的节点为接收者。
发送消息的类型:
- MEET消息:发送者收到客户端发送的CLUSTER MEET命令时,发送者会向接收者发送METT消息,请求接收者加入发送者当前所处的集群里
- PING消息:集群里的每个节点默认每隔一秒钟都会从已知节点列表中随机选出5个节点,对这5个节点中最长时间没有发送过PING消息的节点发送PING消息,以此来检测被选中的节点是否在线。除此之外,如果节点A最后一次收到节点B发送的PONG消息的时间距离当前时间已经超过了节点A的cluster-node-timeout选项设置时长的一半,那么节点A也会向节点B发送PING消息。
- PONG消息:接收者收到发送者发来的MEET消息或PING消息时,为了向发送者确认这条MEET消息或是PING消息已到达,接收者会向发送者返回一条PONG消息。另外,一个节点也可以通过集群广播自己的PONG消息来让集群的其他节点立即刷新关于这个节点的认知。
- FAIL消息:当主节点A判断主节点B已经进入FAIL状态时,节点A会向集群广播一条关于节点B的FAIL消息,所有收到这个消息的节点都会立刻把节点B标记为已下线
- PUBLISH消息:节点接收到一个PUBLISH命令时,节点会执行命令并向集群广播一条PUBLISH消息。所有收到这条PUBLISH消息的节点都会执行相同的PUBLISH命令
一条消息由消息头header和消息正文data组成
17.1.1 消息头
节点发送的所有消息都由一个消息头包裹,除了包含消息正文外,还包含消息发送者自身的一些信息。
clusterMsg结构的currentEpoch、sender、myslots等属性记录了发送者自身的节点信息,接收者收到这些信息后,在自己的clusterState.nodes字典里找到发送者对应的clusterNode结构,并对结构更新。
17.7.2 MEET PING PONG消息的实现
Redis的各个节点通过 Gossip协议来交换各自关于不同节点的状态信息,Gossip协议由这三种消息实现,正文都是由2个cluster.h/clusterMsgDataGossip结构组成
节点通过消息头的type属性来判断一条消息是MEET、PING还是PONG消息。
每次发送MEET\PING\PONG消息的时候,发送者都从自己的已知节点列表中随机选取两个节点,并将这两个被选中节点的信息分别保存到两个clusterMsgDataGossip结构里面。clusterMsgDataGossip记录了被选中节点的名字、发送者与被选中节点的最后一次发送和接收PING/PONG消息的时间戳、被选中节点的IP地址和端口号,以及被选中节点的标识值。
当接收者收到MEET/PING/PONG消息的时候,接收者会访问消息正文中的两个clusterMsgDataGossip结构,并根据自己是否认识clusterMsgDataGossip结构中记录的被选中节点来选择进行哪种操作:
- 被选中节点不存在于接收者的已知节点列表,和被选中节点进行握手
- 被选中节点已经存在接收者的已知节点列表,更新信息
17.7.3 FAIL消息的实现
集群的主节点A将主节点B标记为已下线FAIL时,主节点A向集群广播一条关于主节点B的FAIL消息,所有收到这条FAIL消息的节点都会把主节点B标记为已下线。
在集群的节点数量比较大的情况下,单纯使用Gossip协议来传播节点的已下线信息会给节点的信息更新带来一定延迟。
FAIL消息的正文由clusterMsgDataFail结构表示,只包含一个nodename属性,该属性记录了已下线节点的名字(集群的每个节点都是独一无二的名字)
17.7.4 PUBLISH消息的实现
当客户端向集群的某个节点发送命令PUBLISH <channel> <message>
,会导致集群的所有节点都向channel频道发送message消息。
消息正文是clusterMsgDataPublish结构
type struct {uint32_t channel_len;uint32_t message_len;char bulk_data[8]
}clusterMsgDataPublish
数据存在字节数组里,bulk_data的0~channel_len-1字节保存的是channel参数,后面保存的是message参数
相关文章:
Redis设计与实现第17章 -- 集群 总结3(ASK错误、复制与故障转移、消息)
17.5 ASK错误 在进行重新分片期间,源节点向目标节点迁移一个槽的过程中,可能会出现这样一种情况:属于被迁移槽的一部分键值对保存在源节点里面,而另一部分键值对则保存在目标节点里面。当客户端向源节点发送一个与数据库键有关的…...
支持向量机(SVM)的解析与应用:从封闭解到时代演变 (中英双语)
中文版 支持向量机(SVM)的解析与应用:从封闭解到时代演变 什么是支持向量机(SVM)? 支持向量机(Support Vector Machine, SVM)是一种经典的监督学习算法,用于解决分类和…...
Linux 密码学的基本知识与应用技术
一、基本知识 (一)加密算法 • 对称加密算法 • 原理:对称加密使用相同的密钥进行加密和解密。例如,在Linux中常用的AES(高级加密标准)算法,发送方和接收方都需要持有相同的密钥。假设要加密…...
【力扣】2094.找出3为偶数
思路 方法一:使用Set集合 1.首先是三层for循环,遍历,并且遇到不满足的情况,便跳过,继续计算。不如前导为0,以及遍历同一个数组下标的情况 2.使用Set集合来确保答案是唯一的,使用桶来标记也是可以的 3.但是…...
【信息系统项目管理师】【综合知识】【备考知识点】第十四章 项目沟通管理
【移动端浏览】☞【信息系统项目管理师】第十四章 项目沟通管理 第十四章 项目沟通管理 (项目沟通管理)定义 项目沟通管理是确保及时、正确地产生、收集、分发、存储和最终处理项目信息所需的过程。 (项目沟通管理)组成部分 (…...
CTFshow黑盒测试刷题
web380 先扫目录 打开 报错了 先用伪协议去查看源码 之前扫到有flag.php 访问一下 就得到flag了 web381 查看一下源码 点击第三个css 藏在目录里面 web382 跟上题一样 不过访问这个页面是一个登录框 试一下弱口令 最后是admin admin888 就进去了 web383 进入这个后台 …...
抖音矩阵系统快速部署指南/抖音矩阵系统源码分发,短视频矩阵账号管理系统开发部署—
抖音矩阵系统的源码分发与短视频账号管理平台的开发部署,要求通过对接官方API来实现功能的拓展。当前开发的账号矩阵管理系统专注于提供一键式管理多个账户的能力,支持定时发布内容、自动化关键词生成以实现搜索引擎优化(SEO)和霸…...
windows文件下换行, linux上不换行 解决CR换行符替换为LF notepad++
html文件是用回车换行的,在windows电脑上,显示正常。 文件上传到linux服务器后,文件不换行了。只有一行。而且相关js插件也没法正常运行。 用notepad查看,显示尾部换行符,是CR,这就是原因。CR是不被识别的。…...
服务器数据恢复—硬盘掉线导致热备盘同步失败的RAID5阵列数据恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障&#…...
活着就好20411205
5号亲爱的朋友们,大家早上好!🌞 今天是5号,星期四,2024年12月的第五天,同时也是第49周的第四天,农历甲辰[龙]年十一月初一日。在这晨曦初露的美好时刻,愿第一缕柔和的阳光悄悄探进你…...
JDK8 下载与安装
下载安装包 官网下载 官网 找到适合的版本: 网盘下载 网盘链接 提取码: 6666 下载得到的安装包: 安装步骤 双击安装包开始安装. 安装路径不要有中文或者特殊符号如空格等. 更改安装路径: 跳出一个页面, 安装公共 JRE: 安装完成: 安装目录: 安装的公共 JRE: JDK 里面的 JR…...
基于MATLAB的信号处理工具:信号分析器
信号(或时间序列)是与特定时间相关的一系列数字或测量值,不同的行业和学科将这一与时间相关的数字序列称为信号或时间序列。生物医学或电气工程师会将其称为信号,而统计学家或金融定量分析师会使用时间序列这一术语。例如…...
Docker Compose 和 Kubernetes 之间的区别?
一、简介🎀 1.1 Docker Compose Docker Compose 是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,可以管理多个 Docker 容器组成一个应用。你只需定义一个 YAML 格式的配置文件 docker-compose.yml ,即可创建并…...
uniapp远程摄像头流界面上显示
用到的插件:dplayer、hls dplayer官网:dplayer 远程摄像头视频流格式:m3u8 可以用来测试的视频流(有的用不了,多试几个,找可以用的):m3u8测试视频 安装hls,任选其一 npm…...
写译 Essay | Translation
单词 参考上篇 总结写译热点单词 | 50篇文章整理 | 手敲自用-CSDN博客 文化类词汇: 包括传统节日及相关活动,如春节(Spring Festival)、中秋节(Mid-Autumn Festival)等。 涵盖中国特色艺术和工艺品,如京剧(Peking opera)、中国画(traditi…...
知乎大数据开发面试题及参考答案
Java 两个线程之间是怎么通信的,属于哪种机制? 在 Java 中,线程间通信主要有以下几种方式: 共享变量:线程可以通过访问共享变量来进行通信。例如,一个线程修改一个共享的成员变量,另一个线程读取这个变量的值。但是这种方式需要注意线程安全问题。如果多个线程同时访问和…...
C# 绘制GDI红绿灯控件
C# 绘制GDI红绿灯控件 using System; using System.Windows.Forms; using System.Drawing;public class TrafficLightControl : Control {protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);Graphics g e.Graphics;g.SmoothingMode System.Drawing.Drawin…...
网络安全-使用HTTP动词篡改的认证旁路
这个东西去年的安全扫描都没有,今天就扫出来了,非常奇怪的一个东西。好吧,找资料找原因。结果可能应为搜索名词的原因,这个问题在群友的帮助下解决了。 在我理解中servlet只有post和get方法,然后结果怎么出来这么多奇…...
多种MyBatis写法(数据库操作)
MyBatis,这个从iBatis演变而来的Java持久层框架,凭借其强大的功能和性能,早已成为企业级应用的首选。本文展示几种MyBatis写法,保证数据库操作既高效又灵活。 1. 批量操作 批量操作是提升数据库操作效率的重要手段。MyBatis提供…...
centos 手动安装libcurl4-openssl-dev库
下载源代码 curl downloadshttps://curl.se/download/ 选择需要下载的版本,我下载的是8.11.0 解压 tar -zxvf curl-8.11.0 查看安装命令 查找INSTALL.md,一般在docs文件夹下 –prefix :指定安装路径(默认安装在/usr/local&…...
C#中的模拟服务器与客户端建立连接
创建一个控制台项目,命名为Server,模拟服务器端。在同一个解决方案下,添加新项目,命名为Client,模拟客户端。在服务器端与客户端之间建立TCP连接,并在客户端发送消息,在服务器端输出。 Server项目具体要求: 1.在Server项目中,用本机端点建立TcpListener对象,进行监…...
论文阅读——Supervised Learning With Quantum-Inspired Tensor Networks
张量网络是高维张量的有效表示,在物理和数学应用中非常成功。我们展示了如何通过使用矩阵乘积状态(张量训练)来参数化用于对图像进行分类的模型,将优化此类网络的算法应用于监督学习任务。对于 MNIST 数据集,我们获得的…...
HTML5系列(11)-- Web 无障碍开发指南
前端技术探索系列:HTML5 Web 无障碍开发指南 ♿ 致读者:构建人人可用的网络 👋 前端开发者们, 今天我们将深入探讨 Web 无障碍开发,学习如何创建一个真正包容、人人可用的网站。让我们一起为更多用户提供更好的网络…...
信号和槽思维脑图+相关练习
将登录框中的取消按钮使用信号和槽的机制,关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为"123456",如果账号密码匹配成功,当前界面关…...
Scala编程基础:模式匹配、解构赋值与正则表达式
在Scala编程语言中,模式匹配、解构赋值和正则表达式是三个非常强大的特性,它们可以让我们以更简洁、更直观的方式处理数据。本文将通过三个示例,详细解释这些特性的使用方法和背后的原理。 1. 模式匹配与case class 模式匹配是Scala中处理数…...
【大数据技术基础】 课程 第1章 大数据技术概述 大数据基础编程、实验和案例教程(第2版)
第1章 大数据技术概述 1.1 大数据时代 这本书的标题是《大数据时代》,副标题为“生活、工作与思维的大变革”。这本书由维克托迈尔-舍恩伯格(Viktor Mayer-Schnberger)和肯尼斯库克耶(Kenneth Cukier)合著,…...
【基础分析】——宏参数连接
示例1: #include<stdio.h>#define STR1(s) #s#define FUN1(a,b) (int)(a##e##b)int main(int argv, char* agrc[]) {printf(STR1(king...));printf("\n");printf("%d\n", FUN1(2, 3));return 0; } 结果: (注&…...
算法3--二分查找
二分查找 原理经典例题[704. 二分查找](https://leetcode.cn/problems/binary-search/)[34. 在排序数组中查找元素的第一个和最后一个位置](https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/)[35. 搜索插入位置](https://leetcode.cn/p…...
【信息系统项目管理师】第7章:项目立项管理 考点梳理
文章目录 7.1 项目建议与立项申请7.2 项目可行性研究7.2.1 可行性研究的内容7.2.2 初步可行性研究7.2.3 详细可行性研究(重点) 7.3 项目评估与决策 【学习建议】本章大概考选择题2分左右,有可能考案例题。论文早年考过。本章知识点比较集中&a…...
帝可得-策略管理
策略管理 需求说明 策略管理主要涉及到二个功能模块,业务流程如下: 新增策略: 允许管理员定义新的策略,包括策略的具体内容和参数(如折扣率)策略分配: 将策略分配给一个或多个售货机。 #mermaid-svg-PSQOJMLJqVGn3W…...
opencv-android编译遇到的相关问题处理
1、opencv-android sdk下载 下载地址:https://opencv.org/releases/ 下载安卓SDK即可 2、解压下载好的SDK 3、导入opencv的SDK到安卓项目中 导入步骤在/OpenCV-android-sdk/sdk/build.gradle文件的注释中写的非常详细,大家可安装官方给出的步骤导入。…...
汽车IVI中控开发入门及进阶(三十六):QML调用蓝牙sdk的架构
Qt/QML本身在做GUI界面工程时,除了各种界面上的按钮、图片、工具条等元素之外,最方便的就是可以通过C++实现界面各种复杂逻辑,而实现上不可避免就需要一些外部库的支持,不管是静态库.a还是动态库.so,比如蓝牙模块。 而QML/C++启动一个蓝牙协议栈SDK作为一个进程,然后启动…...
C++设计模式之外观模式
动机 下图中左边方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。 如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统…...
前缀和篇——繁星斗斗数字交织中,觅得效率明月辉光(1)
前言 在这片无边无际的数字海洋中,如何从中提取出有价值的讯息,成为了计算机科学中的一项重要课题。前缀和算法,作为一种巧妙的技术,恰如其名——通过计算序列中各个元素的前缀和,能够为我们提供一种高效的查询方式&a…...
【论文复现】隐式神经网络实现低光照图像增强
📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 隐式神经网络实现低光照图像增强 引言那么目前低光照图像增强还面临哪些挑战呢? 挑战1. 不可预测的亮度降低和噪声挑战2.度量友好…...
Secured Finance 推出 TVL 激励计划以及基于 FIL 的稳定币
Secured Finance 是新一代 DeFi 2.0 协议,其正在推出基于 FIL 的稳定币、固定收益市场以及具有吸引力的 TVL 激励计划,以助力 Filecoin 构建更强大的去中心化金融生态体系,并为 2025 年初 Secured Finance 协议代币的推出铺平道路。Secure Fi…...
2024前端框架年度总结报告(二):新生qwik+solid和次新生svelte+Astro对比 -各自盯着前端的哪些个痛点 - 前端的区域发展差异
引言 2024年,前端开发依然是技术领域的热点之一。随着 Web 应用的日益复杂,前端框架的更新换代也加速了。尽管 React、Vue 和 Angular 老牌框架年度总结 等“老牌”框架仍然占据着主流市场,但一些新兴的框架在不断挑战这些“巨头”的地位&am…...
MySQL大小写敏感、MySQL设置字段大小写敏感
文章目录 一、MySQL大小写敏感规则二、设置数据库及表名大小写敏感 2.1、查询库名及表名是否大小写敏感2.2、修改库名及表名大小写敏感 三、MySQL列名大小写不敏感四、lower_case_table_name与校对规则 4.1、验证校对规则影响大小写敏感4.1、验证校对规则影响排序 五、设置字段…...
每日速记10道java面试题13-MySQL篇
其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 每日速记10道java面试题07-CSDN博客 每…...
关于Chrome自动同步书签的解决办法
前言 并不一定适用所有用户, 目前我在网上搜集了一些资料,也做了一些尝试。 就我个人总结的经验来讲,分享大家以下几种办法: 1.书签同步插件 点击如下🔗: Chrome书签同步https://bm.famend.cn/ …...
江南大学《2024年807自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《江南大学807自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题...
在VSCode中搭建Python开发环境
在VSCode中搭建Python开发环境 1、安装 首先确保电脑已经安装好Python和VSCode。 2、安装VSCode的Python插件 3、选择python解释器 ctrlshiftP打开VSCode的命令行,输入python: select Interpreter选择合适的python版本。 4、运行代码 在windows下你可以直接使用…...
mac 安装python3和配置环境变量
mac 安装python3和配置环境变量 前言怎样选择python3的版本python3的安装1、去官网下载安装包2、下载完成后直接解压,检查安装是否成功 前言 在学习python的第一步就是安装它和配置他的环境变量,那么选择哪个版本的python你可曾知道,下面就讲解怎样选择…...
微信小程序版小米商城的搭建流程详解!
很多初学微信小程序语法的同学,可能不知道如何布局和搭建一个项目,下面我将讲解初学者如何搭建项目和注意事项。 一、 app.json的配置 {"pages": ["pages/index/index","pages/classification/classification","pag…...
Redis等Spring Cache 框架 实现基于注解的缓存功能
Spring Cache 框架 实现基于注解的缓存功能 底层 基于代理技术 一旦进入方法就进入代理对象 如果redis里有就直接返回 不会走方法 如果缓存没有数据 则通过反射走方法。 概念 缓存 相当于之前的事务处理 同步更改 只是提供了一层抽象 底层可以切换不同的缓存实现 EHCach…...
tcpreplay/tcpdump-重放网络流量/捕获、过滤和分析数据包
tcpdump 是一个网络数据包分析工具,通过捕获并显示网络接口上传输的数据包,帮助用户分析网络流量。 原理:用户态通过 libpcap 库控制数据包捕获,内核态通过网卡驱动获取数据包。 核心功能包括:捕获、过滤和分析数据包…...
【Linux】基础IO_文件系统IO_“一切皆文件”_缓冲区
目录 1. 理解"⽂件" 1-1 狭义理解 1-2 ⼴义理解 1-3 ⽂件操作的归类认知 1-4 系统⻆度 访问文件,需要先打开文件!那么是由谁打开文件??? 操作系统要不要把被打开的文件管理起来? 2. 回顾…...
基于ZYNQ-7000系列的FPGA学习笔记7——按键控制蜂鸣器(模块化编写)
基于ZYNQ-7000系列的FPGA学习笔记7——按键控制蜂鸣器(模块化编写) 1. 实验要求2. 功能分析3. 模块设计4. 波形图4.1 按键消抖模块4.2 按键控制蜂鸣器模块 5.代码编写5.1 rtl代码5.2 测试代码 6. 代码仿真7. 添加约束文件并分析综合 在上期的内容中&…...
Mnesia(三)
在表中保存复杂数据 Mnesia是被设计用来保存Erlang数据结构的。可以把任意类型的Erlang数据结构保存到Mnesia表中。 -export([init_mnesia_schema/0, start/0]). -export([add_plans/0, get_plan/1]). -include_lib("stdlib/include/qlc.hrl"). -record(shop, {ite…...
ELK的Filebeat
目录 传送门前言一、概念1. 主要功能2. 架构3. 使用场景4. 模块5. 监控与管理 二、下载地址三、Linux下7.6.2版本安装filebeat.yml配置文件参考(不要直接拷贝用)多行匹配配置过滤配置最终配置(一、多行匹配、直接读取日志文件、EFK方案&#…...