当前位置: 首页 > news >正文

十二. Redis 集群操作配置(超详细配图,配截图详细说明)

十二. Redis 集群操作配置(超详细配图,配截图详细说明)

文章目录

  • 十二. Redis 集群操作配置(超详细配图,配截图详细说明)
  • 1. 为什么需要集群-高可用性
  • 2. 集群概述(及其搭建)
  • 3. Redis 集群的使用
  • 4. Redis 集群故障恢复
  • 5. Redis 集群的 Jedis 开发(使用Java程序连接 Redis 同时开启集群)
  • 6. Redis 集群的优缺点
  • 7. 补充:
  • 8. 最后:


1. 为什么需要集群-高可用性

为什么需要集群-高可用性:

  1. 生产环境的实际需求和问题:
    1. 容量不够,redis 如何进行扩容。
    2. 并发写操作,redis 如何分摊。
    3. 主从模式,薪火相传模式,主机宕机,会导致 ip 地址发生变化,应用程序中配置需要修改对应的主机地址,端口等信息。
  2. 传统解决方案 代理主机来解决

在这里插入图片描述

上图解图:

  1. 客户端请求先到代理服务器
  2. 由代理服务器进行请求转发到对应的业务处理器
  3. 为了高可用,代理服务,A服务,B服务,C服务都需要搭建主从结构(至少是一主一从 这样就需求搭建至少 8 台服务器)。
  4. 这种方案的缺点是:成本高,维护困难,如果是一主多从,成本就会更高。

redis3.0 提供解决方案 无中心化集群配置:

在这里插入图片描述

  1. 各个 Redis 服务仍然采用主从结构。
  2. 各个 Redis 服务是连通的,任何一台服务器,都可以作为请求入口
  3. 各个 Redis 服务器因为是连通的,可以进行请求转发
  4. 这种方式,就无中心化 集群配置,可以看到,只需要 6 台服务器即可搞定。
  5. 无中心化集群配置 ,还会根据 key 值,计算 slot ,把数据分散到不同的主机,从而缓解单个主机的存取压力
  6. Redis 推荐使用无中心化集群配置。
  7. 在实际生成环境,各个 Redis 服务器,应当部署到不同的机器(防止机器宕机,主从复制失效)。

2. 集群概述(及其搭建)

  1. Redis 集群实现了对 Redis 的水平扩容,即启动 N 个 Redis 节点,将整个数据库分布存储在这个 N 个节点中,每个节点存储总数居的 1 / N
  2. Redis 集群通过分区(partition) 来提供一定程度的可用性(availability) ,即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。

Redis 集群搭建:实操演示:

在这里插入图片描述

  1. redis.conf 配置修改
cluster-enabled yes        打开集群模式
cluster-config-file nodes-6379.conf    设定节点配置文件名
cluster-node-timeout 15000      设定节点失联时间,超过该时间(毫秒),集群自动进行主 从切换
  1. vi /rainbowsea/redis6379.conf , 删除不必要的内容 增加 cluster 配置, 文件最后内容,如图
include /rainbowsea/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
masterauth rainbowsea
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

在这里插入图片描述

在这里插入图片描述

[root@localhost rainbowsea]# cp redis6379.conf redis6380.conf 
[root@localhost rainbowsea]# cp redis6379.conf redis6381.conf 
[root@localhost rainbowsea]# cp redis6379.conf redis6389.conf 
[root@localhost rainbowsea]# cp redis6379.conf redis6390.conf 
[root@localhost rainbowsea]# cp redis6379.conf redis6391.conf 
[root@localhost rainbowsea]# 

在这里插入图片描述

在这里插入图片描述

  1. 使用查找替换修改另外 5 个文件

在这里插入图片描述

在这里插入图片描述

换指令    :%s/6379/6380

其它几个文件以此操作即可, 操作的时候,一定要小心, 最后建议再检查一下

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

所有的都要加上这个 masterauth rainbowsea 加上 Redis 的密码,没有设置密码的则不用配置这个。

所有的都要加上这个 masterauth rainbowsea 加上 Redis 的密码,没有设置密码的则不用配置这个。

所有的都要加上这个 masterauth rainbowsea 加上 Redis 的密码,没有设置密码的则不用配置这个。

include /rainbowsea/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
masterauth rainbowsea
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
  1. 启动 6 个 Redis 服务
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6379.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6380.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6381.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6389.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6390.conf
[root@localhost rainbowsea]# redis-server /rainbowsea/redis6391.conf
[root@localhost rainbowsea]# ps -aux | grep redis

在这里插入图片描述

在这里插入图片描述

  1. 将六个节点合成一个集群

在这里插入图片描述

在这里插入图片描述

进入到该路径下后,将六个节点合成一个集群的指令:

如下这个是 Redis 没有配置密码的,指令

redis-cli --cluster create --cluster-replicas 1 192.168.76.147:6379 192.168.76.147:6380 192.168.76.147:6381 192.168.76.147:6389 192.168.76.147:6390 192.168.76.147:6391

如下这个是 Redis 配置了密码的,指令

redis-cli --cluster create -a rainbowsea --cluster-replicas 1 192.168.76.147:6379 192.168.76.147:6380 192.168.76.147:6381 192.168.76.147:6389 192.168.76.147:6390 192.168.76.147:6391

注意事项和细节:

  1. 组合之前,确保所有(你要使用上的端口的) Redis服务器都是启动的,同时在 root 目录下(我这里是 root 配置的) nodes-xxxx.conf 文件都生成正常。
  2. 此时不可以用 127.0.0.1 ,需要使用真实的 IP地址(就是你连接 Linux 的地址,Linux 当中使用ifconfig 指令查询到的地址),在真实生产环境 IP都是独立的。
  3. replicas 1 采用最简单的方式配置集群,一台主机,一台从机,正好三组。
  4. 搭建加群如果没有成功,把 sentinel 进程关闭掉,再试一下。
  5. 分许主从对应关系。

在这里插入图片描述

在这里插入图片描述

  • 分析主从对应关系:如下

在这里插入图片描述

在这里插入图片描述

  1. 集群方式登录:

指令: redis-cli -c -p 6379

指令: cluster nodes 命令查看集群信息, 主从的对应关系, 主要看这里我标注的颜色

[root@localhost src]# redis-cli -c -p 6379
127.0.0.1:6379> auth rainbowsea
127.0.0.1:6379> cluster nodes

在这里插入图片描述

在这里插入图片描述

注意事项和细节:

[root@localhost src]# redis-cli -c -p 6379

在这里插入图片描述

  1. 一个集群至少要有三个主节点。
  2. 选项 --cluster-replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
  3. 分配原则: 尽量保证主服务器和从服务器各自运行在不同的 IP 地址(机器),防止机器故障导致主从机制失效,高可用性得不到保障。

3. Redis 集群的使用

什么是 slots:

Redis 集群启动后, 你会看到如下提示:

在这里插入图片描述
在这里插入图片描述

  1. 一个 Redis 集群包含了 16384 个插槽(hash slot) ,编号从 0-16383 ,Redis 中的每个键都属于这 16384 个插槽的其中一个。注意:这里虽然只有 16384个插槽,但是并不是只能插入 16384个键,多个不同的键可以插入到同一个插槽的,并不是一个插槽一个键的
  2. 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽,其中 CRC16(key) 语句用于计算键 key 的 CRC16的校验和

在这里插入图片描述

  1. 集群中的每个节点负责处理一部分插槽。举个例子:如果一个集群可以有主节点,其中
  • 节点 A 负责处理 0号 ~ 5460号 插槽
  • 节点 B 负责处理 5461号 ~ 10922号 插槽
  • 节点 C 负责处理 10923号 ~ 16383号 插槽

在集群中录入值:

  1. 在 Redis 每次录入,查询键值,redis 都会计算出该 key 应该送往的插槽,如果不是该客户端对应服务器的插槽,redis 会告知前往的 Redis 实例地址和端口。
  2. Redis-cli 客户端提供了 -c 参数实现自动重定向。
  3. redis-cli -c -p 6379 登入后,再录入,查询键值对可以自动重定向

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 不在一个 slot 下的键值,是不能使用 mget,mset 等多键操作
192.168.76.147:6381> mset k1 "v1" k2 "v2" k3 "v3"

在这里插入图片描述

在这里插入图片描述

  • 可以通过{}来定义组的概念,从而使 key 中{}内相同内容的键值对放到一个 slot 中去,就解决了上面 mget 分布到不同 slot 而导致失败的原因。
192.168.76.147:6381> mest k1{order} "v1" k2{order} "v2" k3{order} "v3"

在这里插入图片描述

注意:你如果对键加上了{}组,那么你想要获取到该值的时候,也是要加上对应的{}组的,才能获取到的。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查询集群中的值:

  1. 指令: CLUSTER KEYSLOT <key> 返回 key 对应的 slot 值
192.168.76.147:6381> cluster keyslot k1

在这里插入图片描述

192.168.76.147:6381> cluster keyslot k2{order}

在这里插入图片描述

可以看到归属于{}同一组的,Redis都是分配到了同一个 slot 插槽数值当中。

在这里插入图片描述

  1. 指令: CLUSTER COUNTKEYSINSLOT <slot> 返回 slot 有多少个 key
192.168.76.147:6381> cluster countkeysinslot 12706
(integer) 1
192.168.76.147:6381> cluster countkeysinslot 16025
(integer) 3

在这里插入图片描述

  1. 指令: CLUSTER GETKEYSINSLOT <slot><count> 返回 count 个 slot 槽中的键
192.168.76.147:6381> cluster getkeysinslot 16025 1
1) "k1{order}"
192.168.76.147:6381> cluster getkeysinslot 16025 2
1) "k1{order}"
2) "k2{order}"
192.168.76.147:6381> cluster getkeysinslot 16025 3

在这里插入图片描述

在这里插入图片描述

4. Redis 集群故障恢复

  1. 如果主节点下线, 从节点会自动升为主节点(注意 15 秒超时, 再观察比较准确)
[root@localhost ~]# redis-cli -c -p 6380

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里我们将 6380 主机关闭了。

在这里插入图片描述

在这里插入图片描述

  • 主节点恢复后,主节点回来变成从机

在这里插入图片描述

在这里插入图片描述

如果所有某一段插槽的主从节点都宕掉了 ,Redis 服务是否还能继续,要根据不同的配置而言。

  1. 如果某一段插槽的主从 都宕机了,而在 redis.conf 配置文件当中 cluster-require-full-coverageyes ,那么,整个集群都会被宕掉,无法使用。
  2. 如果某一段插槽的主从 都宕机了,而在 redis.conf 配置文件当中 cluster-require-full-coverageno ,那么,仅仅只是该段插槽的数据不能使用了,也无法存储了,其他插槽的数据还可以继续使用。
  3. redis.conf 文件当中的参数 cluster-require-full-coverage

在这里插入图片描述

5. Redis 集群的 Jedis 开发(使用Java程序连接 Redis 同时开启集群)

  1. 即使连接的不是主机,集群会自动切换主机进行存储,主机写,从机读
  2. 无中心化主从集群,无论从哪台主机写的数据,其他主机上都能读到数据。
  3. 注意:需要将 Redis 相关的端口都打开 否则会报错

配置防火墙将所有相关 Redis 的端口都打开。

[root@localhost src]# firewall-cmd --add-port=6379/tcp --permanent
Warning: ALREADY_ENABLED: 6379:tcp
success
[root@localhost src]# firewall-cmd --add-port=6380/tcp --permanent
success
[root@localhost src]# firewall-cmd --add-port=6381/tcp --permanent
success
[root@localhost src]# firewall-cmd --add-port=6389/tcp --permanent
success
[root@localhost src]# firewall-cmd --add-port=6390/tcp --permanent
success
[root@localhost src]# firewall-cmd --add-port=6391/tcp --permanent

在这里插入图片描述

[root@localhost src]# firewall-cmd --reload

在这里插入图片描述

[root@localhost src]# firewall-cmd --list-all

在这里插入图片描述

pom.xml 当中引入 redis.clients 依赖。如下:

   <!--        引入 jedis 依赖--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency>

在这里插入图片描述

首先测试,是否可以连接到 Redis 服务器。
在这里插入图片描述

package com.rainbowsea.jedis;import org.junit.Test;
import redis.clients.jedis.Jedis;public class JedisCluster_ {@Testpublic void con() {// 使用 ip地址 + redis的端口的构造器方法Jedis jedis = new Jedis("192.168.76.147", 6379);// 如果Redis 配置了密码,则需要进行身份校验jedis.auth("rainbowsea");String ping = jedis.ping();System.out.println("连接成功 ping 返回的结果 = " + ping);jedis.close();  // 关闭当前连接,注意并没有关闭 Redis}}

在这里插入图片描述

在这里插入图片描述


import org.junit.Test;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;import java.util.HashSet;
import java.util.Set;public class JedisCluster_ {public static void main(String[] args) {Set<HostAndPort> set = new HashSet<>();set.add(new HostAndPort("192.168.76.147", 6379));JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();// 对连接池进行配置jedisPoolConfig.setMaxTotal(200);jedisPoolConfig.setMaxIdle(32);jedisPoolConfig.setMaxWaitMillis(60 * 1000); // 单位是毫秒jedisPoolConfig.setBlockWhenExhausted(true);jedisPoolConfig.setTestOnBorrow(true);JedisCluster jedisCluster = new JedisCluster(set,5000,5000,5,"rainbowsea",jedisPoolConfig );jedisCluster.set("address", "bj");String address = jedisCluster.get("address");System.out.println("address=>" + address);jedisCluster.close();}
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6. Redis 集群的优缺点

优点:

  1. 实现扩容。
  2. 分摊压力。
  3. 无中心配置相对简单。

缺点:

  1. 多键操作是不被支持的。
  2. 多键的 Redis 事务是不被支持的。 lua 脚本不被支持
  3. 由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而其它方案想要迁移至 redis cluster ,需要整体迁移而不是逐步过渡,复杂度较大。

7. 补充:

将 root 目录下的,rdb、aof 文件都删除掉

在这里插入图片描述

[root@localhost ~]# rm -f dump*.rdb

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

相关文章:

十二. Redis 集群操作配置(超详细配图,配截图详细说明)

十二. Redis 集群操作配置(超详细配图&#xff0c;配截图详细说明) 文章目录 十二. Redis 集群操作配置(超详细配图&#xff0c;配截图详细说明)1. 为什么需要集群-高可用性2. 集群概述(及其搭建)3. Redis 集群的使用4. Redis 集群故障恢复5. Redis 集群的 Jedis 开发(使用Java…...

网络工程师 (26)TCP/IP体系结构

一、层次 四层&#xff1a; 网络接口层&#xff1a;TCP/IP协议的最底层&#xff0c;负责网络层与硬件设备间的联系。该层协议非常多&#xff0c;包括逻辑链路和媒体访问控制&#xff0c;负责与物理传输的连接媒介打交道&#xff0c;主要功能是接收数据报&#xff0c;并把接收到…...

TensorFlow域对抗训练DANN神经网络分析MNIST与Blobs数据集梯度反转层提升目标域适应能力可视化...

全文链接&#xff1a;https://tecdat.cn/?p39656 本文围绕基于TensorFlow实现的神经网络对抗训练域适应方法展开研究。详细介绍了梯度反转层的原理与实现&#xff0c;通过MNIST和Blobs等数据集进行实验&#xff0c;对比了不同训练方式&#xff08;仅源域训练、域对抗训练等&am…...

保姆级教程--DeepSeek部署

以DeepSeek-R1或其他类似模型为例&#xff0c;涵盖环境配置、代码部署和运行测试的全流程&#xff1a; 准备工作 1. 注册 Cloud Studio - 访问 [Cloud Studio 官网](https://cloudstudio.net/)&#xff0c;使用腾讯云账号登录。 - 完成实名认证&#xff08;如需长期使用…...

机器学习之心的创作纪念日

机缘 今天&#xff0c;是我成为创作者的第1460天。 在这段时间里&#xff0c;获得了很大的成长。 虽然日常忙碌但还在坚持创作、初心还在。 日常 创作已经成为我生活的一部分&#xff0c;尤其是在我的工作中&#xff0c;创作是不可或缺的&#xff0c;创作都是核心能力之一。…...

VeryReport和FastReport两款报表软件深度分析对比

在当今数据驱动的商业环境中&#xff0c;报表软件已经成为企业管理和数据分析的重要工具。无论是中小型企业还是大型企业&#xff0c;都需要依赖高效的报表工具来快速生成、分析和展示数据。市面上有许多报表工具&#xff0c;其中VeryReport和FastReport是两款备受关注的报表软…...

libtorch的c++,加载*.pth

一、转换模型为TorchScript 前提&#xff1a;python只保存了参数&#xff0c;没存结构 要在C中使用libtorch&#xff08;PyTorch的C接口&#xff09;&#xff0c;读取和加载通过torch.save保存的模型&#xff08; torch.save(pdn.state_dict()这种方式&#xff0c;只保存了…...

去除 RequestTemplate 对象中的指定请求头

目录 目标实现获取 RequestTemplate 对象去除请求头 目标 去除 RequestTemplate 对象中的指定请求头&#xff0c;如 Authorization 等。 实现 获取 RequestTemplate 对象 获取 RequestTemplate 对象的方式有很多种&#xff0c;如 通过 feign 虚拟客户端配置器&#xff1a; …...

b s架构 网络安全 网络安全架构分析

目录 文章目录 目录网络安全逻辑架构 微分段&#xff08;Micro-segmentation&#xff09;防火墙即服务&#xff08;Firewall asa Service &#xff0c;FWaaS&#xff09;安全网络网关&#xff08;Secure web gateway&#xff09;净化域名系统&#xff08;Sanitized Domain Na…...

【DeepSeek论文精读】2. DeepSeek LLM:以长期主义扩展开源语言模型

欢迎关注[【AIGC论文精读】](https://blog.csdn.net/youcans/category_12321605.html&#xff09;原创作品 【DeepSeek论文精读】1. 从 DeepSeek LLM 到 DeepSeek R1 【DeepSeek论文精读】2. DeepSeek LLM&#xff1a;以长期主义扩展开源语言模型 【DeepSeek论文精读】3. DeepS…...

Spring Boot和SpringMVC的关系

Spring Boot和SpringMVC都是Spring框架的一部分&#xff0c;但它们的作用和使用方式有所不同。为了更好地理解它们的关系&#xff0c;我们可以从以下几个方面进行详细说明&#xff1a; 1. SpringBoot的作用 SpringBoot是一个开源框架&#xff0c;它的目的是简化Spring应用程序…...

java基础4(黑马)

一、方法 1.定义 方法&#xff1a;是一种语法结构&#xff0c;它可以把一段代码封装成一个功能&#xff0c;以便重复使用。 方法的完整格式&#xff1a; package cn.chang.define;public class MethodDemo1 {public static void main(String[] args) {// 目标&#xff1a;掌…...

nodejs - vue 视频切片上传,本地正常,线上环境导致磁盘爆满bug

nodejs 视频切片上传&#xff0c;本地正常&#xff0c;线上环境导致磁盘爆满bug 原因&#xff1a; 然后在每隔一分钟执行du -sh ls &#xff0c;发现文件变得越来越大&#xff0c;即文件下的mp4文件越来越大 最后导致磁盘直接爆满 排查原因 1、尝试将m3u8文件夹下的所有视…...

注意力机制(Attention Mechanism)和Transformer模型的区别与联系

注意力机制(Attention Mechanism) 和 Transformer 模型 是深度学习领域中的两个重要概念,虽然它们紧密相关,但有着明显的区别。下面我们将从 定义、作用、结构 和 应用 等多个维度来分析这两者的区别与联系。 1. 定义 注意力机制(Attention Mechanism): 注意力机制是一…...

C++,设计模式,【单例模式】

文章目录 一、模式定义与核心价值二、模式结构解析三、关键实现技术演进1. 基础版(非线程安全)2. 线程安全版(双重检查锁)3. 现代C++实现(C++11起)四、实战案例:全局日志管理器五、模式优缺点深度分析✅ 核心优势⚠️ 潜在缺陷六、典型应用场景七、高级实现技巧1. 模板化…...

C++:类和对象初识

C&#xff1a;类和对象初识 前言类的引入与定义引入定义类的两种定义方法1. 声明和定义全部放在类体中2. 声明和定义分离式 类的成员变量命名规则 类的访问限定符及封装访问限定符封装 类的作用域与实例化类的作用域类实例化实例化方式&#xff1a; 类对象模型类对象的大小存储…...

官网下载Redis指南

1.访问官网 https://redis.io/downloads/#stack 2.点击redis图标 拉到下面点击download 在新页面拉到最下面&#xff0c;点击install from source 找到需要的大版本后&#xff0c;点击releases page 最后点击下载需要的版本号即可...

活动预告 |【Part1】 Azure 在线技术公开课:迁移和保护 Windows Server 和 SQL Server 工作负载

课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft 云技术的了解。参加我们举办的“迁移和保护 Windows Server 和 SQL Server 工作负载”活动&#xff0c;了解 Azure 如何为将工作负…...

【Linux系统编程】五、进程创建 -- fork()

文章目录 前言Ⅰ. 重温fork函数一、fork()的概念二、如何理解fork()有两个返回值 Ⅱ.fork的常规用法Ⅲ. fork调用失败的原因Ⅳ. 写时拷贝为什么存在写时拷贝❓❓❓ 前言 现阶段我们知道进程创建有如下两种方式&#xff0c;其实包括在以后的学习中这两种方式也是最常见的&#…...

深入解析 STM32 GPIO:结构、配置与应用实践

理解 GPIO 的工作原理和配置方法是掌握 STM32 开发的基础,后续的外设(如定时器、ADC、通信接口)都依赖于 GPIO 的正确配置。 目录 一、GPIO 的基本概念 二、GPIO 的主要功能 三、GPIO 的内部结构 四、GPIO 的工作模式 1. 输入模式 2. 输出模式 3. 复用功能模式 4. 模…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器&#xff0c;一般作为Page页面的根容器使用&#xff0c;其内部默认包含了标题栏、内容区和工具栏&#xff0c;其中内容区默认首页显示导航内容&#xff08;Navigation的子组件&#xff09;或非首页显示&#xff08;Nav…...