一、伸缩原理

  • Redis集群提供了灵活的节点扩容和收缩方案。在不影响集群对外服务的情况下,可以为集群添加节点进行扩容也可以下线部分节点进行缩容,如下图所示:

  • 从上图看出,Redis集群可以实现对节点的灵活上下线控制。其中原理可抽象为槽和对应数据在不同节点之间灵活移动。首先来看我们之前搭建的集群槽和数据与节点的对应关系,如下图所示:

  • 三个主节点分别维护自己负责的槽和对应的数据,如果希望加入1个节点实现集群扩容时,需要通过相关命令把一部分槽和数据迁移给新节点,如下图所示:

  • 图中每个节点把一部分槽和数据迁移到新的节点6385,每个节点负责的槽和数据相比之前变少了从而达到了集群扩容的目的。这里我们故意忽略了槽和数据在节点之间迁移的细节,目的是想让读者重点关注在上层槽和节点分配上来,理解集群的水平伸缩的上层原理:集群伸缩=槽和数据在节点之间的移动
  • 下面将介绍集群扩容和收缩的细节

二、集群扩容

  • 扩容是分布式存储最常见的需求,Redis集群扩容操作可分为如下步骤:
    • 准备新节点
    • 加入集群
    • 迁移槽和数据

①开启集群

  • 现在我们先开启一个集群,集群中有6个节点,其中前3个为主节点,后3个为复制节点
sudo redis-server /opt/redis/conf/redis-6379.conf
sudo redis-server /opt/redis/conf/redis-6380.conf
sudo redis-server /opt/redis/conf/redis-6381.conf
sudo redis-server /opt/redis/conf/redis-6382.conf
sudo redis-server /opt/redis/conf/redis-6383.conf
sudo redis-server /opt/redis/conf/redis-6384.conf

  • 由于输入命令的时候复制关系有点不同,可能与上面的图片不一致,但是都是3对3的复制
  • 然后查看集群信息,可以看到:
    • 槽0-5460属于6379,6383复制6379
    • 槽5461-10922属于6380,6384复制6380
    • 槽10923-16383属于6381,6382复制6381

  • 其中的集群开启在这里省略了,详情可参阅前面的文章:https://blog.csdn.net/qq_41453285/article/details/106451296

②准备新节点

  • 下面我们新增两个新节点,一个为6385,一个为6386,其中6385作为主节点,6386复制6385
  • 新节点建议跟集群内的节点配置保持一致,便于管理统一,准备好配置后启动两个节点命令如下:
sudo redis-server /opt/redis/conf/redis-6385.conf
sudo redis-server /opt/redis/conf/redis-6386.conf

  • 启动后的新节点作为孤儿节点运行,并没有其他节点与之通信,集群结构如下图所示:

③加入集群

  • 新节点依然采用cluster meet命令加入到现有集群中。在集群内任意节点执行cluster meet命令让6385和6386节点加入进来,命令如下:
redis-cli -p 6379 cluster meet 127.0.0.1 6385
redis-cli -p 6379 cluster meet 127.0.0.1 6386

 

  • 新节点加入后集群结构如下图所示:

  • 集群内新旧节点经过一段时间的ping/pong消息通信之后,所有节点会发现新节点并将它们的状态保存到本地。例如我们在6380节点上执行cluster nodes命令可以看到新节点信息,如下所示:
redis-cli -p 6380 cluster nodes

  • 新节点刚开始都是主节点状态,但是由于没有负责的槽,所以不能接受任何读写操作。对于新节点的后续操作我们一般有两种选择:
    • 为它迁移槽和数据实现扩容
    • 作为其他主节点的从节点负责故障转移

使用redis-cli --cluster命令实现加入集群

  • 上面我们使用cluster meet命令将两个新节点加入集群,我们还可以使用redis-cli --cluster命令来加入新节点,还实现了直接 添加为从节点的支持,内部同样采用cluster meet命令实现加入集群功能
  • 命令如下:
    • --cluster-slave和--cluster-master-id是可选的,在设置从节点的时候才会用。如果不指定--cluster-master-id会随机分配到任意一个主节点
redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id <arg># 例如下面将6385加入到6379所属的集群中,并且作为117457eab5071954faab5e81c3170600d5192270的从节点
redis-cli --cluster add-node 127.0.0.1:6385 127.0.0.1:6379 --cluster-slave --cluster-master-id 117457eab5071954faab5e81c3170600d5192270
  • 例如对于上面加入集群的操作,我们还可以采取下面的命令:
# 将6385添加到6379所在的集群中
redis-cli --cluster add-node 127.0.0.1:6385 127.0.0.1:6379# 将6386添加到6379所在的集群中
redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6379
  • 备注:正式环境建议使用redis-cli cluster命令加入新节点,该命令内部会执行新节点状态检查,如果新节点已经加入其他集群或者包含数据,则放弃集群加入操作并打印如下信息:

  • 如果我们手动执行cluster meet命令加入已经存在于其他集群的节点,会造成被加入节点的集群合并到现有集群的情况,从而造成数据丢失和错乱, 后果非常严重,线上谨慎操作

④迁移槽和数据

  • 上面我们添加了两个新节点:6385、6386。其中6385作为主节点存储数据,6386作为从节点复制6385。下面我们要把其他节点的槽和数据迁移到6386这个节点中

槽迁移计划

  • 槽是Redis集群管理数据的基本单位,首先需要为新节点制定槽的迁移 计划,确定原有节点的哪些槽需要迁移到新节点。迁移计划需要确保每个节点负责相似数量的槽,从而保证各节点的数据均匀
  • 例如,在集群中加入 6385节点,如下图所示,加入6385节点后,原有节点负责的槽数量从6380变为4096个

  • 槽迁移计划确定后开始逐个把槽内数据从源节点迁移到目标节点,如下图所示

迁移数据

  • 数据迁移过程是逐个槽进行的,每个槽数据迁移的流程如下图所示。流程说明:
    • 1)对目标节点发送cluster setslot {slot} importing {sourceNodeId}命令,让 目标节点准备导入槽的数据
    • 2)对源节点发送cluster setslot {slot} migrating {targetNodeId}命令,让源 节点准备迁出槽的数据
    • 3)源节点循环执行cluster getkeysinslot {slot} {count}命令,获取count个属于槽{slot}的键
    • 4)在源节点上执行migrate {targetIp} {targetPort} "" 0 {timeout} keys {keys...}命令,把获取的键通过流水线(pipeline)机制批量迁移到目标节点,批量 迁移版本的migrate命令在Redis3.0.6以上版本提供,之前的migrate命令只能 单个键迁移。对于大量key的场景,批量键迁移将极大降低节点之间网络IO次数
    • 5)重复执行步骤3)和步骤4)直到槽下所有的键值数据迁移到目标节点
    • 6)向集群内所有主节点发送cluster setslot {slot} node {targetNodeId}命令,通知槽分配给目标节点。为了保证槽节点映射变更及时传播,需要遍历发送给所有主节点更新被迁移的槽指向新节点

  • 使用伪代码模拟迁移过程如下:
def move_slot(source,target,slot):# 目标节点准备导入槽target.cluster("setslot",slot,"importing",source.nodeId);# 目标节点准备全出槽source.cluster("setslot",slot,"migrating",target.nodeId);while true :# 批量从源节点获取键keys = source.cluster("getkeysinslot",slot,pipeline_size);if keys.length == 0:# 键列表为空时,退出循环break;# 批量迁移键到目标节点source.call("migrate",target.host,target.port,"",0,timeout,"keys",keys);# 向集群所有主节点通知槽被分配给目标节点for node in nodes:if node.flag == "slave":continue;node.cluster("setslot",slot,"node",target.nodeId);
  • 第一步:我们现在6379所在槽中添加3个键,然后使用“cluster keyslot”命令查看这3个键属于哪些槽中,可以看到都在4096这个槽中
set key:test:5028 value:5028
set key:test:68253 value:68253
set key:test:79212 value:79212

  • 第二步:在目标节点(6385)上准备导入槽4096的数据,并且通过cluster nodes命令确认一下导入状态
# 最后的id为6379的id
cluster setslot 4096 importing fe7a63f5ff36e04446d1427ef2a262c940642d3a# 查看一下导入状态
cluster nodes

  • 第三步:源节点(6379)上准备导出4096数据,并且通过cluster nodes命令确认一下导出状态
# 最后的id为6385的id
cluster setslot 4096 migrating e993fc8bb9e80cac7948e83a190e087bbe58f3aa# 查看一下导入状态
cluster nodes

  • 第四步:源节点(6379)上批量获取4096对应的键,然后使用migrate命令批量迁移出这3个键
# 批量获取4096对应的键
cluster getkeysinslot 4096 100# 迁移之前确认一下三个键存在于源节点中
mget key:test:5028 key:test:68253 key:test:79212# 批量迁移出这3个键
migrate 127.0.0.1 6385 "" 0 5000 keys key:test:5028 key:test:68253 key:test:79212

  • 出于演示目的,我们继续查询这三个键,发现已经不在源节点中, Redis返回ASK转向错误,ASK转向负责引导客户端找到数据所在的节点, 细节将在后面“请求路由”文章中说明
mget key:test:5028 key:test:68253 key:test:79212

  • 第五步:通知所有主节点槽4096指派给目标节点6385
redis-cli -p 6379 cluster setslot 4096 node e993fc8bb9e80cac7948e83a190e087bbe58f3aa
redis-cli -p 6380 cluster setslot 4096 node e993fc8bb9e80cac7948e83a190e087bbe58f3aa 
redis-cli -p 6381 cluster setslot 4096 node e993fc8bb9e80cac7948e83a190e087bbe58f3aa 
redis-cli -p 6385 cluster setslot 4096 node e993fc8bb9e80cac7948e83a190e087bbe58f3aa 

  • 第六步:确认源节点6379不再负责槽4096改为目标节点6385负责

  • 此处我们只将6379所属的槽4096迁移给6385负责,但是其他槽还没有迁移,下面我们使用reids-lic cluster将剩余的槽迁移给6385

⑤使用redis-cli cluster进行迁移

  • 在④中我们使用了各种命令进行迁移,但是这种迁移每次需要自己手动输入需要迁移的键,如果键太多,那么上面的方法显然不适合,因此我们还可以使用redis-cli cluster命令进行迁移
  • 命令如下:
    • host:port:必传参数,集群内任意节点地址,用来获取整个集群信息
    • --from:制定源节点的id,如果有多个源节点,使用逗号分隔,如果是all源节点变为集群内所有主节点,在迁移过程中提示用户输入
    • --to:需要迁移的目标节点的id,目标节点只能填写一个,在迁移过程 中提示用户输入
    • --slots:需要迁移槽的总数量,在迁移过程中提示用户输入
    • --yes:当打印出reshard执行计划时,是否需要用户输入yes确认后再执行reshard
    • --timeout:控制每次migrate操作的超时时间,默认为60000毫秒
    • ·--pipeline:控制每次批量迁移键的数量,默认为10
redis-cli --cluster reshard host:port --from <arg> --to <arg> --slots <arg> --yes --timeout
<arg> --pipeline <arg>
  • reshard命令简化了数据迁移的工作量,其内部针对每个槽的数据迁移同样使用之前的流程

迁移数据

  • 第一步:在④中已经新节点6395迁移了一个槽4096,剩下的槽数据迁移使用redis-cli cluster完成,命令如下:
redis-cli --cluster reshard 127.0.0.1:6379
  • 输入上面的命令之后会让你输入一系列的信息,如下面所示
  • 第二步:首先让你输入需要迁移的槽数量,此处我们输入4096

  • 第三步:然后让你输入目标节点ID,只能指定一个,因为我们需要迁移到6385中,因此下面输入6385的ID

  • 第四步:之后输入源节点的ID,redis会从这些源节点中平均取出对应数量的槽,然后迁移到6385中,下面我们分别输入6379、6380、6381的节点ID。最后要输入done表示结束

  • 第五步:数据迁移之前会打印出所有的槽从源节点到目标节点的计划,确认计划无误后输入yes执行迁移工作:

  • 输入yes之后会输入大量的迁移信息,迁移完成之后reshard命令自动退出
  • 第六步:我们检查节点和槽映射的变化,如下如所示,6385负责的槽变为0-1364、4096、5461-6826、10923-12287

  • 第七步:由于槽用于hash运算本身顺序没有意义,因此无须强制要求节点负责槽的顺序性。迁移之后建议使用下面的命令检查节点之间槽的均衡性。命令如下:
redis-cli --cluster rebalance 127.0.0.1:6380

  • 通过上图可以看出迁移之后所有主节点负责的槽数量差异在2%以内,因此集群节点数据相对均匀,无需调整

⑥添加从节点

  • 上面我们把6385、6386节点加入到集群,节点6385迁移了部分槽和数据作为主节点,但相比其他主节点目前还没有从节点,因此该节点不具备故障转移的能力
  • 这时需要把节点6386作为6385的从节点,从而保证整个集群的高可用。使用下面的命令为主节点添加对应从节点,注意在集群模式下slaveof添加从节点操作不再支持。如下所示:
# 后面的ID为主节点6385的ID
cluster replicate e993fc8bb9e80cac7948e83a190e087bbe58f3aa

  • 从节点内部除了对主节点发起全量复制之外,还需要更新本地节点的集群相关状态,查看节点6386状态确认已经变成6385节点的从节点:

  • 到此整个集群扩容完成,集群关系结构如下图所示

三、集群收缩

  • 收缩集群意味着缩减规模,需要从现有集群中安全下线部分节点。安全下线节点流程如下图所示

  • 流程说明:
    • 1)首先需要确定下线节点是否有负责的槽,如果是,需要把槽迁移到 其他节点,保证节点下线后整个集群槽节点映射的完整性
    • 2)当下线节点不再负责槽或者本身是从节点时,就可以通知集群内其 他节点忘记下线节点,当所有的节点忘记该节点后可以正常关闭
  • 下面我们以上面的环境为基础,进行下线迁移

①下线迁移槽

  • 当前集群中有4个主节点和4个从节点,现在我们想把6381和6382节点进行下线(其中6381是主节点,6382复制6381)
  • 下线节点需要把自己负责的槽迁移到其他节点,原理与之前节点扩容的 迁移槽过程一致
  • 第一步:下线之前,先查看一下6381和6382的信息,6381是主节点,负责槽12288-16383,6382是它的从节点

  • 收缩正好和扩容迁移方向相反,6381变为源节点,其他主节点变为目标节点,源节点需要把自身负责的4096个槽均匀地迁移到其他主节点上。如下图所示

  • 下面使用reshard命令完成槽迁移,由于我们要将6381的槽均匀的分配到其它三个节点中,因此需要输入3次reshard命令,每次迁移的目标节点ID不同
  • 第二步:先迁移到6379节点上,下面输入命令的步骤与“二”中的步骤一样,需要输入很多参数
redis-cli --cluster reshard 127.0.0.1:6381

 

  • 然后输入yes同意迁移

  • 迁移完成之后查看一下信息,6379接管了1365个槽12288-16652

  • 第三步:再迁移到6380节点上,步骤与上面一样,不过需要输入6380的ID
redis-cli --cluster reshard 127.0.0.1:6381

  • 然后输入yes同意迁移

 

  • 迁移完成之后查看一下信息,6380接管了1365个槽13653-15017

  • 第四步:再迁移到6385节点上,步骤与上面一样,不过需要输入6385的ID
redis-cli --cluster reshard 127.0.0.1:6381

 

  • 然后输入yes同意迁移

 

  • 迁移完成之后查看一下信息,6385接管了1366个槽15018-16383

  • 通过上图也可以看出6381节点不再负责任何槽了

②忘记节点

  • 由于集群内的节点不停地通过Gossip消息彼此交换节点状态,因此需要通过一种健壮的机制让集群内所有节点忘记下线的节点。也就是说让其他节点不再与要下线节点进行Gossip消息交换
  • Redis提供了clusteforget {downNodeId}命令实现该功能,如下图所示:

  • 当节点接收到cluster forget {down NodeId}命令后,会把nodeId指定的 点加入到禁用列表中,在禁用列表内的节点不再发送Gossip消息。禁用列表有效期是60秒,超过60秒节点会再次参与消息交换。也就是说当第一次forget命令发出后,我们有60秒的时间让集群内的所有节点忘记下线节点
  • 线上操作不建议直接使用cluster forget命令下线节点,需要跟大量节点命令交互,实际操作起来过于繁琐并且容易遗漏forget节点
  • 建议使用redis-cli --cluster del-node {host:port} {downNodeId}命令,内部实现的伪代码如下:
def delnode_cluster_cmd(downNode):# 下线节点不允许包含slotsif downNode.slots.length != 0exit 1end# 向集群内节点发送cluster forgetfor n in nodes:if n.id == downNode.id:# 不能对自己做forget操作continue;# 如果下线节点有从节点则把从节点指向其他主节点if n.replicate && n.replicate.nodeId == downNode.id :# 指向拥有最少从节点的主节点master = get_master_with_least_replicas();n.cluster("replicate",master.nodeId);#发送忘记节点命令n.cluster('forget',downNode.id)# 节点关闭downNode.shutdown();
  • 从伪代码看出del-node命令帮我们实现了安全下线的后续操作。当下线主节点具有从节点时需要把该从节点指向到其他主节点,因此对于主从节点都下线的情况,建议先下线从节点再下线主节点,防止不必要的全量复制。

开始移除节点

  • 对于6381和6384节点下线操作,命令如下:
# 后面的为6381的ID
redis-cli --cluster del-node 127.0.0.1:6379 0c02519bbb8e6876e3376c94f9703d2d3d4db36a# 后面的为6382的ID
redis-cli --cluster del-node 127.0.0.1:6379 4fb31d352bc6cdb074c1b04715f7500a615a411e

  • 节点下线后确认节点状态,发现不已经不包含6381和6382这两个节点了

  • 到目前为止,我们完成了节点的安全下线,新的集群结构如下所示

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 九大排序之快速排序(C语言实现)(数据结构)

    快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程…...

    2024/4/24 9:35:19
  2. jQuery实现无动画轮播图(含完整源码)

    本博文源于jquery基础,旨在探讨如何实现无动画轮播图。 测试效果自己会动,点击黄色按钮或者点击右下方按钮也可以自动跳转。 之前用原生态实现动画轮播图,也可以去看一下: JavaScript|3步搞定轮播图(含测试源码) 因为之前比较简单,只是考虑左右按钮点点动动,所以大家看完…...

    2024/4/27 15:21:40
  3. 图片实现染色效果(基于滤镜和混合模式)

    法一:基于滤镜 sepia(),它会给图片增加一种降饱和度的橙黄色染色效果。 如果我们想好的主色调的饱和度比这高,可用saturate()滤镜来给每个像素提升饱和度。 若不希望把图片调为橙黄色调,而是稍深的亮粉色,还需再添加一个hue-rotate()滤镜,把每个像素的色相以指定的度数进…...

    2024/4/24 9:35:14
  4. JS怎么获取当前时间戳

    JS获取当前时间戳,可以通过Date.now()方法来实现,返回自1970年1月1日00:00:00 UTC以来经过的毫秒数也就是当前时间戳。下面我们就结合具体的代码示例,给大家介绍JS怎么获取当前时间戳。代码示例如下:打造全网web前端全栈资料库(总目录)看完学的更快,掌握的更加牢固,你值…...

    2024/4/24 9:35:13
  5. PySeison-教程4:TideGauge类

    PySeison-教程4:TideGauge类%pylab inline从numpy和matplotlib填充交互式名称空间1. PySeidon-TideGauge对象初始化与“ ADCP类”和“ Drifter类”相似,“ TideGauge类”是基于测量的对象。1.1。包装进口与Python中的任何其他库一样,必须先导入PySeidon才能使用。在这里,我…...

    2024/4/24 9:35:13
  6. Linux笔记

    Linux与UNIX发展史 关系:UNIX-Linux(父-子)Linux系统简介 开源软件 商业软件:收费 开源软件:不等同于免费软件Linux应用领域 查询后台服务器网站:www.netcraft.com 1、企业服务器 2、嵌入式 3、电影娱乐业 Linux系统安装VMware 简介 VMware是一个虚拟PC软件,可以在现有的…...

    2024/4/24 9:35:11
  7. Ubuntu图形化界面崩溃修复办法

    Ubuntu图形化界面的修复 问题复现:界面出现“The system is running in low-graphics mode”错误 解决方法: 1.Ctrl+ALT+F1 进入控制台【笔记本:Ctrl+Fn+ALT+F1】 2.输入用户名(root)和密码进入系统 3.输入以下命令:cd /etc/X11 sudo cp xorg.conf.failsafe xorg.conf sud…...

    2024/4/27 4:53:10
  8. idea相关快捷键

    Ctrl相关快捷键 介绍Ctrl + B 进入光标所在的方法/变量的接口或是定义处,等效于Ctrl + 左键单击Ctrl + D 复制光标所在行或复制选择内容,并把复制内容插入光标位置下面Ctrl + F 在当前文件进行文本查找Ctrl + H 查看类的继承结构Ctrl + N 通过类名定位文件Ctrl + O 快速重写父…...

    2024/4/24 9:35:09
  9. 辉涩笔记004—20200531

    如何让自己在黑月中也可以发光 目标,30500 1.规划好自己的职业路线 2.规划好自己的时间,每天要做什么?每天都有产出。 3.让别人感觉到自己的进步。 4.多看书。写读后感。 拼尽所有,拼上生命,往前跑,只为在漫漫旅途中给你照亮前方。...

    2024/4/24 9:35:16
  10. 原生js实现Ajax原理

    相信很多小伙伴在面试的时候,大部分都逃不了被问原生js的问题吧,尤其是高频的高频,** 说一下实现原生Ajax的原理** 原生???哦买噶的!在回答这个问题前,我们需要了解一下什么是ajax,通俗易懂的来说就是在不刷新页面的情况下,能获取到新的数据 ajax的工作原理是什么?废…...

    2024/4/24 9:35:10
  11. 词根vol/volve/vor/vid/vis/等衍生出单词

    本博文源于刘洪波老师的《英文字根词源精讲》,包含vid/vis/vig/viv/voc/vol/volve/vor/等词根衍生的单词,也包含ab/ad/ambi/an/anti/auto/bene/bi/cata/circum/com/contra/de等英文前根 vid/vis = to see 看见 来源于拉丁文videre,“to see”. visa n.签证 visage n.容貌 vi…...

    2024/4/16 10:35:12
  12. 2020.5.31 python学习

    与类相关的魔术属性 class Man():passclass Woman():passclass Children(Man,Woman):""" 成员属性: eye 成员方法: skylight moonread __makebaby 完成的功能: 描述小孩天生神力. """eye = "血轮眼"def skylight(self):print("一…...

    2024/4/16 10:36:14
  13. Python常用内建模块

    文章目录datetime获取当前日期和时间获取指定日期和时间datetime转化为timestamptimestamp转化为datetimestr转化为datetimedatetime转化为strdatetime加减collectionsnamedtupledequedefaultdictChainMapCounterbase64hashlib摘要算法简介MD5摘要算法使用摘要算法的应用hmacit…...

    2024/4/18 23:26:26
  14. 设置Android Studio开发无线调试

    设置Android Studio开发无线调试1、从插件市场安装插件WIFI ADB ULTIMATE并重启Android Studio生效。这是右边框会增加一个选项,就是刚才安装的插件:2、保证手机/pad设备和电脑连接同一wifi,否则无法进行无线调试,切记。3、通过数据线连接设备,打开设备的5555端口,每次设…...

    2024/4/16 10:36:04
  15. 计算机网络安全教程(第三版)第十章简答题答案

    第 10 章 防火墙与入侵检测什么是防火墙?古时候的防火墙和目前通常说的防火墙有什么联系和区别? 答: 防火墙的本义原指古代人们的房屋之间修建的墙,这道墙可以防止火灾发生时蔓延到别的房屋。现今防火墙不是指为了防火而造的墙,而是指隔离在本地网络与外界网络之间的一道防…...

    2024/4/16 10:36:29
  16. 腾讯T4推荐五本涨薪文档:SSM+微服务+Nginx+Redis+MySQL

    SSM第1部分入门和技术基础第1章认识SSM框架和Redis第2章Java设计模式第2部分互联网持久框架- -MyBatis第3章认识MyBatis核心组件第4章MyBatis配置第5章映射器第6章动态SQL第7章MyBatis的解析和运行原理第8章插件第3部分Spring基础第9章Spring IoC的概念第10章装配Spring Bean第…...

    2024/4/20 1:30:04
  17. 计算机网络课程设计-Socket网络通信(C++, MacOS)

    实验要求: 利用Socket实现双机通信 实验目的: 利用Socket编程,采用其中的TCP面向连接方式,实现计算机数据的交换 具体要求:操作系统:可在Linux或Windows操作系统下实现 编程语言:C或C++,若使用Java、python等更高级的语言或脚本语言则须实现下面的“扩展功能” 界面要求…...

    2024/4/16 10:36:04
  18. 计算机网络安全教程(第三版)第十一章简答题答案

    第 11 章 IP安全与Web安全说明IP安全的必要性。 答: 大型网络系统内运行多种网络协议(TCP/IP、IPX/SPX和NETBEUA等),这些网络协议并非为安全通信设计。而其IP协议维系着整个TCP/IP协议的体系结构,除了数据链路层外,TCP/IP的所有协议的数据都是以IP数据报的形式传输的,目…...

    2024/4/16 10:36:04
  19. 剑指offer-js 顺时针打印矩阵

    顺时针打印矩阵 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.问题分析: 定义四个变量,表示左上和右下的打…...

    2024/4/24 3:55:24
  20. eNSP模拟器中NE40E与AR通过Eth-Tunk对接由于hash算法不同导致业务不通问题记录

    故障现象,查看两端eth-trunk状态正常,但会有eth-trunk IP/DOWN的记录,并且业务不通NE40E设备查看eth-trunk信息如下[~NE]display eth-trunk 10 Eth-Trunk10s state information is: Local: LAG ID: 10 WorkingMode: STATIC Preempt Delay: Disabled …...

    2024/4/24 9:35:14

最新文章

  1. Windows系统下使用MySQL8.0.22创建第二套数据库

    配置新的 MySQL 实例&#xff1a; 为了创建一个新的数据库实例&#xff0c;你需要复制 MySQL 的安装目录并创建一个新的数据目录和配置文件。假设你已经安装了 MySQL 在 C:\Program Files\MySQL\ 下&#xff0c;按照以下步骤操作&#xff1a; 复制整个 MySQL 文件夹&#xff0c…...

    2024/4/27 18:45:15
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. VScode代码查找、替换

    VScode代码查找、替换 快捷方法按CtrlF &#xff08;Mac为CommandF&#xff09; 右上角出现的框就是查找框&#xff0c;可以输入想找的内容 点击左边的小尖儿&#xff0c;输入替换的内容后 按回车是替换一个&#xff0c;按Ctrl回车&#xff08;Command回车&#xff09;是全替换…...

    2024/4/19 16:26:17
  4. 文件系统 FTP Ubuntu 安装入门介绍

    FTP 环境: Ubuntu 14.04 blog zh_CN ubuntu14.04 Install 全新安装&#xff1a;apt-get install vsftpd 重新安装:apt-get --reinstall install vsftpd 卸载并清除配置文件&#xff1a;apt-get --purge remove vsftpd Start & Restart $ service vsftpd start $ se…...

    2024/4/26 19:07:53
  5. Databend 开源周报第 138 期

    Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持多表插入 …...

    2024/4/26 11:53:31
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57