Redis 学习笔记(十五)Redis Cluster 集群扩容与收缩

2023-11-11

Redis Cluster 集群伸缩

1. 伸缩原理

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

我们在Redis Cluster 介绍与搭建这篇文章中搭建了一个三主三从Redis集群(如下图所示)。在搭建 Redis Cluster 通信流程剖析这篇博客中根据源码详细剖析了搭建集群的流程。

这里写图片描述

本篇博客要讲的是,Redis集群的扩容和缩容过程。

我们先根据Redis Cluster 介绍与搭建将如图的集群搭建起来,查看搭建的效果。

127.0.0.1:6379> cluster nodes
29978c0169ecc0a9054de7f4142155c1ab70258b 127.0.0.1:6379 myself,master - 0 0 7 connected 0-5461

8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 master - 0 1496717082785 3 connected 5462-10922

66478bda726ae6ba4e8fb55034d8e5e5804223ff 127.0.0.1:6381 master - 0 1496717085793 2 connected 10923-16383

961097d6be64ebd2fd739ff719e97565a8cee7b5 127.0.0.1:6382 slave 29978c0169ecc0a9054de7f4142155c1ab70258b 0 1496717084791 7 connected

6fb7dfdb6188a9fe53c48ea32d541724f36434e9 127.0.0.1:6383 slave 8f285670923d4f1c599ecc93367c95a30fb8bf34 0 1496717087797 4 connected

e0c7961a1b07ab655bc31d8dfd583da565ec167d 127.0.0.1:6384 slave 66478bda726ae6ba4e8fb55034d8e5e5804223ff 0 1496717086795 2 connected

对应的主节点负责的槽位信息,如下图所示:

这里写图片描述

2. 扩容集群

扩容集群是分布式存储最常见的需求,Redis集群扩容可以分为如下步骤:

  • 准备新节点
  • 加入集群
  • 迁移槽和数据

2.1 准备新节点

我们需要两个节点,端口分别为63856386,配置和之前集群节点配置基本相同,除了端口不同,以便于管理。6385节点配置如下:

port 6385                               //端口
cluster-enabled yes                     //开启集群模式
cluster-config-file nodes-6385.conf     //集群内部的配置文件
cluster-node-timeout 15000              //节点超时时间,单位毫秒
// 其他配置和单机模式相同

启动两个节点

sudo redis-server conf/redis-6385.conf
sudo redis-server conf/redis-6386.conf

启动后的新节点会作为孤儿节点运行,没有和其他节点与之通信。

2.2 加入集群

我们可以通过CLUSTER MEET命令将6385节点加入到集群中。

127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6385
OK
127.0.0.1:6379> CLUSTER NODES
cb987394a3acc7a5e606c72e61174b48e437cedb 127.0.0.1:6385 master - 0 1496731333689 8 connected
......

也可以使用redis专门进行集群管理的工具redis-trib.rb,位于Redis的源码目录中,把6386节点加入到集群中

sudo src/redis-trib.rb add-node 127.0.0.1:6386 127.0.0.1:6379
127.0.0.1:6379> CLUSTER NODES
cdfb1656353c5c7f29d0330a754c71d53cec464c 127.0.0.1:6386 master - 0 1496731447703 0 connected
......

这两种方法可以,新加入的节点都是主节点,因为没有负责槽位,所以不能接受任何读写操作,对于新加入的节点,我们可以有两个操作:

  • 为新节点迁移槽和数据实现扩容。
  • 作为其他主节点的从节点负责故障转移。

2.3 迁移槽和数据

当我们将新节点加入集群后,我们就可以将槽和数据迁移到新的节点,迁移的方法也有两种,可以使用redis-trib.rb工具,也可以通过手动命令的方式,但是一般要确保每个主节点负责的槽数是均匀的,因此要使用redis-trib.rb工具来批量完成,但是我们只是为了演示迁移的过程,所以接下来手动使用命令进行迁移。

我们先创建几个属于一个槽的键,将这些键迁移到新的节点中。

127.0.0.1:6379> SET key:{test}:555 value:test:555
-> Redirected to slot [6918] located at 127.0.0.1:6380
OK
127.0.0.1:6380> SET key:{test}:666 value:test:666
OK
127.0.0.1:6380> SET key:{test}:777 value:test:777
OK
127.0.0.1:6380> CLUSTER KEYSLOT key:{test}:555
(integer) 6918
127.0.0.1:6380> CLUSTER KEYSLOT key:{test}:666
(integer) 6918
127.0.0.1:6380> CLUSTER KEYSLOT key:{test}:777
(integer) 6918

本来在6379节点中创建,但是重定向到了6380节点中,因为我们常见的键根据CRC16算法计算分配到了6918槽中,而这个槽由6380节点负责。

如果键的名字中带有{},那么计算哈希值时就只计算{}包含的字符串,所以创建的三个键属于一个槽。

计算哈希值的源码如下:

unsigned int keyHashSlot(char *key, int keylen) {
    int s, e; /* start-end indexes of { and } */
    // 找'{'字符
    for (s = 0; s < keylen; s++)
        if (key[s] == '{') break;
    // 没有找到"{}",直接计算整个key的哈希值
    if (s == keylen) return crc16(key,keylen) & 0x3FFF;
    // 找到'{',检查是否有'}'
    for (e = s+1; e < keylen; e++)
        if (key[e] == '}') break;
    // 没有找到配对的'}',直接计算整个key的哈希值
    if (e == keylen || e == s+1) return crc16(key,keylen) & 0x3FFF;
    // 如果找到了"{}",计算{}中间的哈希值
    return crc16(key+s+1,e-s-1) & 0x3FFF;
}

我们已经获取了要迁移的槽,是6918。因此,流程如下:

  • 目标6385节点中,将槽6918设置为导入状态
127.0.0.1:6385> CLUSTER SETSLOT 6918 importing 8f285670923d4f1c599ecc93367c95a30fb8bf34
OK
// 8f285670923d4f1c599ecc93367c95a30fb8bf34 是 6380 节点的名字

目标6385节点中,查看槽6918导入状态

127.0.0.1:6385> CLUSTER NODES
cb987394a3acc7a5e606c72e61174b48e437cedb 127.0.0.1:6385 myself,master - 0 0 8 connected [6918-<-8f285670923d4f1c599ecc93367c95a30fb8bf34]
  • 6380节点中,将槽6918设置为导出状态
127.0.0.1:6380> CLUSTER SETSLOT 6918 migrating cb987394a3acc7a5e606c72e61174b48e437cedb
OK
// cb987394a3acc7a5e606c72e61174b48e437cedb 是 6385 节点的名字

6380节点中,查看槽6918导出状态

127.0.0.1:6380> CLUSTER NODES
8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 myself,master - 0 0 3 connected 5462-10922 [6918->-cb987394a3acc7a5e606c72e61174b48e437cedb]
  • 批量获取槽6918中的键
127.0.0.1:6380> CLUSTER GETKEYSINSLOT 6918 5
1) "key:{test}:555"
2) "key:{test}:666"
3) "key:{test}:777"

确认一下这三个键是否存在于源6380节点。

127.0.0.1:6380> MGET key:{test}:777 key:{test}:666 key:{test}:555
1) "value:test:777"
2) "value:test:666"
3) "value:test:555"
  • 执行migrate命令进行迁移
127.0.0.1:6380> MIGRATE 127.0.0.1 6385 "" 0 1000 keys key:{test}:777 key:{test}:666 key:{test}:555
OK

批量迁移版本的MIGRATE命令是在redis 3.0.6之后加入的,命令参数如下:

MIGRATE host port key dbid timeout [COPY | REPLACE]
MIGRATE host port "" dbid timeout [COPY | REPLACE] KEYS key1 key2 ... keyN
// host port 指定迁移的目的节点地址
// dbid 指定迁移的数据库id
// timeout 迁移的超时时间
// 如果指定了 COPY 选项,表示不删除源节点上的key
// 如果指定了 REPLACE 选项,替换目标节点上已存在的key(如果存在)

当迁移完成后,我们在源6380节点查询这三个键,发送回复了一个ASK错误

127.0.0.1:6380> MGET key:{test}:777 key:{test}:666 key:{test}:555
(error) ASK 6918 127.0.0.1:6385

最后,我们只需向任意节点发送CLUSTER SETSLOT <slot> NODE <target_name>命令,将槽指派的信息发送给节点,然后这个节点会将这个指派信息发送至整个集群。

CLUSTER SETSLOT 6918 node cb987394a3acc7a5e606c72e61174b48e437cedb
// cb987394a3acc7a5e606c72e61174b48e437cedb 是 6385 节点的名字

6381节点执行命令

127.0.0.1:6381> CLUSTER SETSLOT 6918 node cb987394a3acc7a5e606c72e61174b48e437cedb
OK

6379节点查看当前集群槽指派信息

127.0.0.1:6379> CLUSTER NODES
29978c0169ecc0a9054de7f4142155c1ab70258b 127.0.0.1:6379 myself,master - 0 0 7 connected 0-5461
66478bda726ae6ba4e8fb55034d8e5e5804223ff 127.0.0.1:6381 master - 0 1496736248776 2 connected 10923-16383
cb987394a3acc7a5e606c72e61174b48e437cedb 127.0.0.1:6385 master - 0 1496736244766 10 connected 6918
8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 master - 0 1496736247773 3 connected 5462-6917 6919-10922
// 过滤掉从节点和未指派槽的主节点

可以看到6380节点负责的槽变为5462-6917 6919-10922,而6918已经被6385节点负责了。

  • 添加从节点

开始的时候,我们加入了两个新节点到集群中,节点6385已经迁移了槽位和数据作为主节点,但是该节点还不具有故障转移的能力。

此时,还需要将6386节点作为6385节点的从节点,从而保证集群的高可用。使用cluster replicate <master_id>命令为主节点添加从节点,集群模式下不支持slaveof命令。

127.0.0.1:6386> CLUSTER REPLICATE cb987394a3acc7a5e606c72e61174b48e437cedb
OK
127.0.0.1:6386> CLUSTER NODES
cb987394a3acc7a5e606c72e61174b48e437cedb 127.0.0.1:6385 master - 0 1496742992748 10 connected 6918
cdfb1656353c5c7f29d0330a754c71d53cec464c 127.0.0.1:6386 myself,slave cb987394a3acc7a5e606c72e61174b48e437cedb 0 0 0 connected

到此就完成了集群的扩容。集群关系如下图所示:

这里写图片描述

3. 收缩集群

收缩集群以为着缩减规模,需要从集群中安全下线部分节点。需要考虑两种情况:

  • 确定下线的节点是否有负责槽,如果是,需要把槽迁移到其他节点,保证节点下线后整个槽节点映射的完整性。
  • 当下线节点不在负责槽或着本身是从节点时,就可以通知集群内其他节点忘记下线节点,当所有节点忘记该节点后就可以正常关闭。

我们这次使用redis-trib.rb工具来下线迁移槽。流程和扩容集群非常相似,正好方向相反,将6380变为目标节点,6385成了源节点。将刚才新扩容的集群收缩回去。

./redis-trib.rb reshard 127.0.0.1:6385
>>> Performing Cluster Check (using node 127.0.0.1:6385)
......
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
// 你想迁移多少个槽
How many slots do you want to move (from 1 to 16384)? 1 /*迁移一个槽*/
// 目标节点的id
What is the receiving node ID? 8f285670923d4f1c599ecc93367c95a30fb8bf34 /*输入目标`6380`节点的id*/
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
// 输入要迁移槽的源节点
// all 表示所有节点都是源节点
// done 表示输入完成
Source node #1:cb987394a3acc7a5e606c72e61174b48e437cedb
Source node #2:done
.....
// 是否立即执行重新分片计划
Do you want to proceed with the proposed reshard plan (yes/no)? yes
Moving slot 6918 from 127.0.0.1:6385 to 127.0.0.1:6380: ...

查看一下结果:

127.0.0.1:6380> CLUSTER NODES
8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 myself,master - 0 0 11 connected 5462-10922
cb987394a3acc7a5e606c72e61174b48e437cedb 127.0.0.1:6385 master - 0 1496744498017 10 connected

6380节点已经接管了6385节点的槽。

最后让集群所有的节点忘记下线节点6385。执行CLUSTER FORGET <down_node_id>或者使用工具。

./redis-trib.rb del-node 127.0.0.1:6379 cdfb1656353c5c7f29d0330a754c71d53cec464c
>>> Removing node cdfb1656353c5c7f29d0330a754c71d53cec464c from cluster 127.0.0.1:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
./redis-trib.rb del-node 127.0.0.1:6379 cb987394a3acc7a5e606c72e61174b48e437cedb
>>> Removing node cb987394a3acc7a5e606c72e61174b48e437cedb from cluster 127.0.0.1:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

注意,先下线从节点,在下线主节点,以免不必要的全量复制操作。对6379节点做忘记下线节点的操作,那么经过一段时间,集群中的其他节点也都会忘记。

127.0.0.1:6380> CLUSTER NODES
6fb7dfdb6188a9fe53c48ea32d541724f36434e9 127.0.0.1:6383 slave 8f285670923d4f1c599ecc93367c95a30fb8bf34 0 1496744890808 11 connecte
29978c0169ecc0a9054de7f4142155c1ab70258b 127.0.0.1:6379 master - 0 1496744892814 7 connected 0-5461
66478bda726ae6ba4e8fb55034d8e5e5804223ff 127.0.0.1:6381 master - 0 1496744891810 2 connected 10923-16383
e0c7961a1b07ab655bc31d8dfd583da565ec167d 127.0.0.1:6384 slave 66478bda726ae6ba4e8fb55034d8e5e5804223ff 0 1496744888804 2 connected
8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 myself,master - 0 0 11 connected 5462-10922
961097d6be64ebd2fd739ff719e97565a8cee7b5 127.0.0.1:6382 slave 29978c0169ecc0a9054de7f4142155c1ab70258b 0 1496744889805 7 connected

6380端口的主节点已经忘记了下线节点,因此下线节点已经安全的下线。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis 学习笔记(十五)Redis Cluster 集群扩容与收缩 的相关文章

  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • 使用 Sentinels 升级 Redis 的最佳实践?

    我有 3 个 Redis 节点 由 3 个哨兵监视 我进行了搜索 文档似乎不清楚如何最好地升级此类配置 我目前使用的是 3 0 6 版本 我想升级到最新的 5 0 5 我对这方面的程序有几个疑问 升级两个大版本可以吗 我在我们的暂存环境中执
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 有没有办法让特定的key在集群模式下定位到特定的redis实例上?

    我想让我的多锁位于不同的redis实例上 我发现redission可以指定一个实例来执行命令 但是如果该命令与key相关 则指定的实例会将命令传输到另一个实例 你能给我一些建议吗 你可以 但这并不是微不足道的 首先 Redis 在键中使用大
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • Redis+Docker+Django - 错误 111 连接被拒绝

    我正在尝试使用 Redis 作为使用 Docker Compose 的 Django 项目的 Celery 代理 我无法弄清楚我到底做错了什么 但尽管控制台日志消息告诉我 Redis 正在运行并接受连接 事实上 当我这样做时 docker
  • 如何将“.csv”数据文件导入Redis数据库

    如何将 csv 数据文件导入 Redis 数据库 csv 文件中包含 id 时间 纬度 经度 列 您能否向我建议导入 CSV 文件并能够执行空间查询的最佳方法 这是一个非常广泛的问题 因为我们不知道您想要什么数据结构 您期望什么查询等等 为
  • 由于配置文件错误,无法启动 Redis 服务器

    我刚刚按照此处的说明安装了 Redis http redis io download http redis io download 当我运行 redis server redis conf 时出现以下错误 FATAL CONFIG FILE
  • ServiceStack.Redis:无法连接:sPort:

    我经常得到 ServiceStack Redis 无法连接 sPort 0 或 ServiceStack Redis 无法连接 sPort 50071 或其他端口号 当我们的网站比较繁忙时 就会出现这种情况 Redis 本身看起来很好 CP
  • 使用环境变量在 redis.conf 中设置动态路径

    我有一个环境变量MY HOME其中有一个目录的路径 home abc 现在 我有一个redis conf文件 我需要像这样设置这个路径 redis conf pidfile MY HOME local var pids redis pid
  • 如何在Redis中正确存储图片?

    决定将图像存储在Redis中 如何正确执行 现在我这样做 redis gt set image path here is the base64 image code 我不确定这是否正常 将图片存储在Redis中是完全可以的 Redis 键和
  • 如何通过ARM模板输出返回Redis的primaryKey?

    我正在尝试借助下面列出的 ARM 模板来部署 Redis 然后返回其主密钥 Azure 门户中 Redis 的 访问密钥 gt 主 下可用的秘密字符串 但是 我从管道 AzureResourceManagerTemplateDeployme
  • 为什么我们需要 Redis 来运行 CKAN?

    我想知道为什么我们需要 Redis 服务器来运行 CKAN 如果需要 为什么 我如何使用 CKAN 配置它 附注 我正在 RHEL7 中运行我的 ckan 实例 Update Redis 已成为一项要求从CKAN 2 7开始 https d
  • nginx/uwsgi 服务器的持久内存中 Python 对象

    我怀疑这是否可能 但这是问题和提出的解决方案 提出的解决方案的可行性是这个问题的对象 我有一些需要可用于所有请求的 全局数据 我将这些数据保存到 Riak 并使用 Redis 作为缓存层以提高访问速度 目前 数据被分为约 30 个逻辑块 每
  • 在 Rails 应用程序上将 HASH 保存到 Redis

    我刚刚开始使用 Redis 和 Rails 所以这可能是一个愚蠢的问题 我试图将哈希值保存到 Redis 服务器 但是当我检索它时 它只是一个字符串 IE hash field gt value field2 gt value2 redis
  • redis.exceptions.ConnectionError:连接到本地主机时出现错误-2:6379。名称或服务未知

    当我在服务器中运行代码时出现此错误 我的环境是 debian 并且Python2 7 3 Traceback most recent call last File fetcher py line 4 in
  • Redis AOF fsync(始终)与 LSM 树

    我对日志结构化合并树 LSM 树 的理解是 它利用了附加到磁盘非常快 因为它不需要查找 这一事实 只需将更新附加到预写日志并返回到客户端即可 我的理解是 这仍然提供了立即的持久性 同时仍然非常快 我不认为 Redis 使用 LSM 树 它似
  • 具有匹配模式的 ioredis 密钥

    我想用键匹配模式 LOGIN 搜索 Redis 数据库 我在我的应用程序中使用 ioredis 昨天我搜索了整个网络 我得到了一些执行这项工作的选项 如下所示 KEYS 扫描流 Issue import Redis from ioredis
  • Microsoft.Extensions.Caching.Redis 选择与 db0 不同的数据库

    一个关于了解使用哪个redis数据库以及如何配置它的问题 我有一个默认值ASP NET Core Web 应用程序和默认配置的本地redis服务器 含15个数据库 通过包管理控制台我已经安装了 Install Package Microso

随机推荐

  • 多级页表的优点和缺点

    多级页表是基于虚拟地址的分段来划分等级的 最低等级的页表上保存了最终的虚拟页号和物理页号的对应关系 例如拿32位的虚拟地址来说 如果页面的大小为4K 也就是12位 那么地址空间内将有20位 也就是1M的页表项目 每个项目对应一个虚拟页面 那
  • 机器学习2:朴素贝叶斯分类器Naïve Bayes Classifier(基于R language&Python)

    朴素贝叶斯是基于贝叶斯定理与特征条件独立假设的分类方法 朴素贝叶斯法与贝叶斯估计是不同的概念 对于给定的训练数据集 首先基于特征条件独立假设学习输入 输出的联合概率分布 然后基于此模型 对个给定的输入 x x x 利用贝叶斯定理求出后验概率
  • Unity基础篇:Unity2D图集(2):将剪裁好的图片导出。

    转载http blog csdn net hongyouwei article details 45011315 这位大佬讲的很好 但是他没有很好地考虑到我等小白的感受 故在此补充说明 1 在Unity的Project窗口下的Assets里
  • Kubernetes:全面了解 Deployment

    本文为作者的 Kubernetes 系列电子书的一部分 电子书已经开源 欢迎关注 电子书浏览地址 https k8s whuanle cn 适合国内访问 https ek8s whuanle cn gitbook Deployment 是
  • C语言练习

    大家好啊 我是一名职高的学生 即将面临就业 在就业和升本中选择了升本 这四年期间学的专业是计算机网络技术 第一年学过C语言也都忘得差不多了 这个暑假重新开始学的C语言并且从今天起开始写博客 下面这些题目是我在书上和一些资料上做的编程题 都是
  • HashMap、HashTable和Vector的存储扩容解析

    HashMap HashTable和Vector是面试时比较高频问到的知识点 今天就从三个的底层源码的角度分析三者之间的存储 扩容原理和异同点 HashMap 实现Map接口 实现原理 HashMap采用链地址法 即底层是一个数组实现 数组
  • c语言中gets函数可以输入空格吗_C语言 gets()和scanf()函数的区别

    scanf 函数和gets 函数都可用于输入字符串 但在功能上有区别 若想从键盘上输入字符串 hi hello 则应该使用 gets 函数 gets可以接收空格 而scanf遇到空格 回车和Tab键都会认为输入结束 所有它不能接收空格 ch
  • 2023年探究区块链交易所开发:安全、效率和监管问题

    区块链技术已经成为数字经济领域的热门话题 随着数字资产市场的迅速发展 数字资产交易所也开始成为越来越重要的交易场所 本篇报告将从技术角度出发 探讨区块链交易所的开发 分析目前区块链交易所存在的问题以及未来的发展趋势 Background 区
  • Vue最常见的面试题以及答案(面试必过)

    Vue常见面试题 Vue的优点 说说你对SPA单页面的理解 它的优缺点分别是什么 SPA首屏加载速度慢的怎么解决 Vue初始化过程中 new Vue options 都做了什么 对MVVM的理解 Vue数据双向绑定原理 Vue的响应式原理
  • sqli-labs第十一关

    less11 POST Error Based Single quotes String 基于错误的POST型单引号字符型注入 第十一关开始进入登录框这种模式 像登陆框这种模式也是可以当成sql语句注入的 你想想啊 它动态的页面 通过pos
  • 【论文阅读】文献阅读笔记

    论文阅读 论文阅读笔记 逆向工程与自动化控制应用的视图规划问题综述 Conclusion 求解VPP 视图规划view planing 问题 建立一种扫描计划来对目标进行重建 通常可根据输入的数据类型进行定义采用的方法 方法1 基于目标对象
  • 清华同方台式计算机 U盘启动,清华同方台式机BIOS设置U盘启动方法

    清华同方计算机还以节能闻名 实现了稳定的销售增长 最近 清华同方计算机的一个用户问如何设置U盘启动 接下来是我为大家收集的清华同方台式机BIOS设置U盘启动的方法 欢迎大家阅读 清华同方台式机BIOS设置U盘启动方法 1 使用U教授制作启动
  • CSDN新导航的体验

    看到新导航有几天了 当时只有一个感觉 速度快了 今天开始正式使用了 却发现很大的不便 所谓不便 其实是习惯上的改变造成了我的不适应 用户习惯问题 我建议还是不要改变的好 一个界面看习惯了 突然换掉 一时接受不了 另外值得一提的是 也是很多C
  • lol8月7号服务器维护,LOL8月7日更新了什么内容 8.15新版本更新维护公告

    文章目录 LOL在今天也就是8月7日开启了一次新版本8 15版本的更新维护 这次的更新内容主要是针对8 1版本一些改动补充 所以内容不是非常的多 下面就来为大家详细的分享一下LOL的更新维护公告 亲爱的召唤师 LOL将在 8 月 7 日 4
  • python金融数据分析

    python金融数据分析 基金数据分析 https github com memsploitable foundsDataAnalysis git 股票数据分析 大行情数据分析 https github com memsploitable
  • Cow Land (树链剖分)

    测试链接 题面 Cow Land is a special amusement park for cows where they roam around eat delicious grass and visit different cow
  • 第一篇 香橙派刷机和开发环境准备(Armbian版)

    目录 一 香橙派刷机和SSH登录 1 格式化TF卡 2 烧写系统到TF卡 3 调试串口登陆系统 4 SSH登陆系统 1 nmcli命令 2 armbian config配置菜单 3 使用Xshell以SSH方式登陆 二 OrangePi开发
  • [灵魂拷问]MySQL面试高频100问(工程师方向)

    黑客技术 点击右侧关注 了解黑客的世界 Java开发进阶 点击右侧关注 掌握进阶之路 Python开发
  • 【chatGPT】让java程序员工作效率翻10倍技巧

    本来写给我自己用来着 想着以后忘记了就分享出来 1 写枚举 对于程序员来说枚举的命名需要大写并且写枚举也是被迫的 大部分人的感受都一样啊喂 所以可以直接用chatgpt偷懒 录入关键字 例 帮我写个java枚举 xxxxx 活动兑奖状态 0
  • Redis 学习笔记(十五)Redis Cluster 集群扩容与收缩

    Redis Cluster 集群伸缩 1 伸缩原理 Redis提供了灵活的节点扩容和收缩方案 在不影响集群对外服务的情况下 可以为集群添加节点进行扩容也可以对下线节点进行缩容 我们在Redis Cluster 介绍与搭建这篇文章中搭建了一个