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

【redis】创建集群

这里介绍的是创建redis集群的方式,一种是通过create-cluster配置文件创建部署在一个物理机上的伪集群,一种是先在不同物理机启动单体redis,然后通过命令行使这些redis加入集群的方式。

一,通过配置文件创建伪集群

进入redis源码目录,进入utils目录,展示如下:

[root@localhost redis-7.0.12]# cd utils/
[root@localhost utils]# ls
build-static-symbols.tcl  generate-commands-json.py   lru                    speed-regression.tcl
cluster_fail_time.tcl     generate-module-api-doc.rb  redis-copy.rb          srandmember
corrupt_rdb.c             gen-test-certs.sh           redis_init_script      systemd-redis_multiple_servers@.service
create-cluster            graphs                      redis_init_script.tpl  systemd-redis_server.service
generate-command-code.py  hyperloglog                 redis-sha1.rb          tracking_collisions.c
generate-command-help.rb  install_server.sh           releasetools           whatisdoing.sh

里面有一个create-cluster目录,进入这个目录,展示如下:

[root@localhost utils]# cd create-cluster/
[root@localhost create-cluster]# ls
create-cluster  README

我们通过create-cluster创建伪集群,先看一下这个文件
在这里插入图片描述
这里的host只能指定一个host,所以只能创建出部署在一个物理机上的伪集群。下面解释一下这里面的几个配置,nodes为6,replica为1,表示有3个master3个replica会被创建出来。port为30000,则这6个实例的端口号从30000以此向后递增。

创建6个单体redis实例

[root@localhost create-cluster]# ./create-cluster start
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006

将6个实例创建集群

[root@localhost create-cluster]# ./create-cluster create
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:30005 to 127.0.0.1:30001
Adding replica 127.0.0.1:30006 to 127.0.0.1:30002
Adding replica 127.0.0.1:30004 to 127.0.0.1:30003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 6183b5a00da994d47e38dffa49269535eeef4395 127.0.0.1:30001slots:[0-5460] (5461 slots) master
M: a80106ab7e62d7b9137b35204a61e5b5aa762ad9 127.0.0.1:30002slots:[5461-10922] (5462 slots) master
M: b23c2febd9b9c80f9c5f8fc99e1befab0f475fc2 127.0.0.1:30003slots:[10923-16383] (5461 slots) master
S: 4ee7bf9bb65727d19eaca56888ed3881c5cd2876 127.0.0.1:30004replicates a80106ab7e62d7b9137b35204a61e5b5aa762ad9
S: 88f1790d65f894e8344122b4d29b569f830198ac 127.0.0.1:30005replicates b23c2febd9b9c80f9c5f8fc99e1befab0f475fc2
S: 70b468ecdd60c7a05a8980d16d447a0a560344c5 127.0.0.1:30006replicates 6183b5a00da994d47e38dffa49269535eeef4395
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join>>> Performing Cluster Check (using node 127.0.0.1:30001)
M: 6183b5a00da994d47e38dffa49269535eeef4395 127.0.0.1:30001slots:[0-5460] (5461 slots) master1 additional replica(s)
M: b23c2febd9b9c80f9c5f8fc99e1befab0f475fc2 127.0.0.1:30003slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 4ee7bf9bb65727d19eaca56888ed3881c5cd2876 127.0.0.1:30004slots: (0 slots) slavereplicates a80106ab7e62d7b9137b35204a61e5b5aa762ad9
M: a80106ab7e62d7b9137b35204a61e5b5aa762ad9 127.0.0.1:30002slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 88f1790d65f894e8344122b4d29b569f830198ac 127.0.0.1:30005slots: (0 slots) slavereplicates b23c2febd9b9c80f9c5f8fc99e1befab0f475fc2
S: 70b468ecdd60c7a05a8980d16d447a0a560344c5 127.0.0.1:30006slots: (0 slots) slavereplicates 6183b5a00da994d47e38dffa49269535eeef4395
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

如果是普通的客户端,如果要取出的数据在其他实例上,会报错

[root@localhost create-cluster]# redis-cli -p 30001
127.0.0.1:30001> set k1 fjiet
(error) MOVED 12706 127.0.0.1:30003
127.0.0.1:30001> exit

加个-c即为集群使用的客户端,数据在其他实例上,会转到其他实例

[root@localhost create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> set k1 fjieji
-> Redirected to slot [12706] located at 127.0.0.1:30003
OK

但是如果在执行事务时,转移到了其他实例,为了安全考虑,会报错。
此时我们需要人为的保证事务中的数据都在一个实例中。如在set数据时,通过添加key的前缀{},可以使数据都在同一个实例,进而事务不会报错。

127.0.0.1:30002> watch {cmcc}k1
OK
127.0.0.1:30002> multi
OK
127.0.0.1:30002(TX)> set {cmcc}k2 dfjaiet
QUEUED
127.0.0.1:30002(TX)> get {cmcc}k2
QUEUED
127.0.0.1:30002(TX)> exec
1) OK
2) "dfjaiet"

中止stop,清除clean

[root@localhost create-cluster]# ./create-cluster stop
Stopping 30001
Stopping 30002
Stopping 30003
Stopping 30004
Stopping 30005
Stopping 30006
[root@localhost create-cluster]# ./create-cluster clean
Cleaning *.log
Cleaning appendonlydir-*
Cleaning dump-*.rdb
Cleaning nodes-*.conf
[root@localhost create-cluster]# ll
总用量 8
-rwxrwxr-x. 1 root root 3092 7月  10 04:39 create-cluster
-rw-rw-r--. 1 root root 1437 7月  10 04:39 README

二,通过命令行创建集群

这种方式需要有已经准备好的单体redis,命令行起到的作用类似于上面的create命令,是将这些单体redis整合成一个集群。

[root@localhost create-cluster]# redis-cli --cluster help
Cluster Manager Commands:create         host1:port1 ... hostN:portN--cluster-replicas <arg>check          <host:port> or <host> <port> - separated by either colon or space--cluster-search-multiple-ownersinfo           <host:port> or <host> <port> - separated by either colon or spacefix            <host:port> or <host> <port> - separated by either colon or space--cluster-search-multiple-owners--cluster-fix-with-unreachable-mastersreshard        <host:port> or <host> <port> - separated by either colon or space--cluster-from <arg>--cluster-to <arg>--cluster-slots <arg>--cluster-yes--cluster-timeout <arg>--cluster-pipeline <arg>--cluster-replacerebalance      <host:port> or <host> <port> - separated by either colon or space--cluster-weight <node1=w1...nodeN=wN>--cluster-use-empty-masters--cluster-timeout <arg>--cluster-simulate--cluster-pipeline <arg>--cluster-threshold <arg>--cluster-replaceadd-node       new_host:new_port existing_host:existing_port--cluster-slave--cluster-master-id <arg>del-node       host:port node_idcall           host:port command arg arg .. arg--cluster-only-masters--cluster-only-replicasset-timeout    host:port millisecondsimport         host:port--cluster-from <arg>--cluster-from-user <arg>--cluster-from-pass <arg>--cluster-from-askpass--cluster-copy--cluster-replacebackup         host:port backup_directoryhelp           For check, fix, reshard, del-node, set-timeout, info, rebalance, call, import, backup you can specify the host and port of any working node in the cluster.Cluster Manager Options:--cluster-yes  Automatic yes to cluster commands prompts

这里我们还是先通过create-cluster在一台物理机上准备3主3从,

[root@localhost create-cluster]# ./create-cluster start
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006

创建集群,参数为–cluster,create指定要创建集群的实例的ip和端口,–cluster-replicas 1指定每个master配置1个replica副本。

[root@localhost create-cluster]# redis-cli --cluster create 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:30005 to 127.0.0.1:30001
Adding replica 127.0.0.1:30006 to 127.0.0.1:30002
Adding replica 127.0.0.1:30004 to 127.0.0.1:30003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 516b6edd9231cbae586458d05cef9ab66e8c4135 127.0.0.1:30001slots:[0-5460] (5461 slots) master
M: 6213a983c44d9cf48c253f97931095c5c3e5ab31 127.0.0.1:30002slots:[5461-10922] (5462 slots) master
M: 1cb320162c631fab028ca2742d8b5ac343b51acb 127.0.0.1:30003slots:[10923-16383] (5461 slots) master
S: b5dfe58651d0afeaca07c4cf5a7f6abaa5b42dad 127.0.0.1:30004replicates 516b6edd9231cbae586458d05cef9ab66e8c4135
S: 807550a84b1073fe2dcd04c38c5f94f78e9b93bd 127.0.0.1:30005replicates 6213a983c44d9cf48c253f97931095c5c3e5ab31
S: f73f34070f4051be8a20e30488a3beeed5556b56 127.0.0.1:30006replicates 1cb320162c631fab028ca2742d8b5ac343b51acb
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join>>> Performing Cluster Check (using node 127.0.0.1:30001)
M: 516b6edd9231cbae586458d05cef9ab66e8c4135 127.0.0.1:30001slots:[0-5460] (5461 slots) master1 additional replica(s)
S: f73f34070f4051be8a20e30488a3beeed5556b56 127.0.0.1:30006slots: (0 slots) slavereplicates 1cb320162c631fab028ca2742d8b5ac343b51acb
M: 1cb320162c631fab028ca2742d8b5ac343b51acb 127.0.0.1:30003slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: b5dfe58651d0afeaca07c4cf5a7f6abaa5b42dad 127.0.0.1:30004slots: (0 slots) slavereplicates 516b6edd9231cbae586458d05cef9ab66e8c4135
M: 6213a983c44d9cf48c253f97931095c5c3e5ab31 127.0.0.1:30002slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 807550a84b1073fe2dcd04c38c5f94f78e9b93bd 127.0.0.1:30005slots: (0 slots) slavereplicates 6213a983c44d9cf48c253f97931095c5c3e5ab31
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

新加入节点,或者数据倾斜时,可以使用reshard进行重新分槽。

[root@localhost create-cluster]# redis-cli --cluster reshard 127.0.0.1:30001
>>> Performing Cluster Check (using node 127.0.0.1:30001)
M: 516b6edd9231cbae586458d05cef9ab66e8c4135 127.0.0.1:30001slots:[0-5460] (5461 slots) master1 additional replica(s)
S: f73f34070f4051be8a20e30488a3beeed5556b56 127.0.0.1:30006slots: (0 slots) slavereplicates 1cb320162c631fab028ca2742d8b5ac343b51acb
M: 1cb320162c631fab028ca2742d8b5ac343b51acb 127.0.0.1:30003slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: b5dfe58651d0afeaca07c4cf5a7f6abaa5b42dad 127.0.0.1:30004slots: (0 slots) slavereplicates 516b6edd9231cbae586458d05cef9ab66e8c4135
M: 6213a983c44d9cf48c253f97931095c5c3e5ab31 127.0.0.1:30002slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 807550a84b1073fe2dcd04c38c5f94f78e9b93bd 127.0.0.1:30005slots: (0 slots) slavereplicates 6213a983c44d9cf48c253f97931095c5c3e5ab31
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.#要重新分3333个slot
How many slots do you want to move (from 1 to 16384)? 3333
What is the receiving node ID? 1cb320162c631fab028ca2742d8b5ac343b51acb
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为从所有实例平均分一些slot给指定的实例,这里我们只从一台实例中拿走slot
Source node #1: 516b6edd9231cbae586458d05cef9ab66e8c4135
#开始执行
Source node #2: doneReady to move 3333 slots.Source nodes:M: 516b6edd9231cbae586458d05cef9ab66e8c4135 127.0.0.1:30001slots:[0-5460] (5461 slots) master1 additional replica(s)Destination node:M: 1cb320162c631fab028ca2742d8b5ac343b51acb 127.0.0.1:30003slots:[10923-16383] (5461 slots) master1 additional replica(s)Resharding plan:Moving slot 0 from 516b6edd9231cbae586458d05cef9ab66e8c4135Moving slot 1 from 516b6edd9231cbae586458d05cef9ab66e8c4135Moving slot 2 from 516b6edd9231cbae586458d05cef9ab66e8c4135Moving slot 3 from 516b6edd9231cbae586458d05cef9ab66e8c4135Moving slot 4 from 516b6edd9231cbae586458d05cef9ab66e8c4135Moving slot 5 from 516b6edd9231cbae586458d05cef9ab66e8c4135

查看集群节点信息

[root@localhost create-cluster]# redis-cli --cluster info 127.0.0.1:30001
127.0.0.1:30001 (516b6edd...) -> 0 keys | 2128 slots | 1 slaves.
127.0.0.1:30003 (1cb32016...) -> 1 keys | 8794 slots | 1 slaves.
127.0.0.1:30002 (6213a983...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 1 keys in 3 masters.
0.00 keys per slot on average.

可以看到有一个master的slot明显少了很多。

相关文章:

【redis】创建集群

这里介绍的是创建redis集群的方式&#xff0c;一种是通过create-cluster配置文件创建部署在一个物理机上的伪集群&#xff0c;一种是先在不同物理机启动单体redis&#xff0c;然后通过命令行使这些redis加入集群的方式。 一&#xff0c;通过配置文件创建伪集群 进入redis源码…...

linux 配置nacos遇见的问题及解决办法

本次的集群是启动一个服务的三个不同端口&#xff0c;配置如下&#xff1a; 一.application.properties 加上下列配置&#xff0c;目的是使用自己的mysql数据库&#xff1a; spring.datasource.platformmysql db.num1 db.url.0jdbc:mysql://127.0.0.1:3306/nacos_config?s…...

小程序开发趋势:探索人工智能在小程序中的应用

第一章&#xff1a;引言 小程序开发近年来取得了快速的发展&#xff0c;成为了移动应用开发的重要一环。随着人工智能技术的飞速发展&#xff0c;越来越多的企业开始探索如何将人工智能应用于小程序开发中&#xff0c;为用户提供更智能、便捷的服务。本文将带您一起探索人工智能…...

基于埋点日志数据的网络流量统计 - PV、UV

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 一、 网站总流量数统计 - PV 1. 需求分析 2. 代码实现 方式一 方式二 方式三&#xff1a;使用process算子实现 方式四&#xff1a;使用process算子实现 二、网站独立访客数统计 - UV 1. …...

cuda入门demo(2)——最基础的二方向sobel

⚠️主要是自己温习用&#xff0c;只保证代码正确性&#xff0c;不保证讲解的详细性。 今天继续总结cuda最基本的入门demo。很多教程会给你说conv怎么写&#xff0c;实际上sobel也是conv&#xff0c;并且conv本身已经用torch实现了。 之前在课题中尝试了sobel的变体&#xff0…...

软件外包开发的后台开发语言

在软件外包开发中&#xff0c;后台语言的选择通常取决于项目需求、客户偏好、团队技能和开发效率。今天和大家分享一些常用的后台语言及选择它们的原因&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。…...

自动驾驶感知系统-全球卫星定位系统

卫星定位系统 车辆定位是让无人驾驶汽车获取自身确切位置的技术&#xff0c;在自动驾驶技术中定位担负着相当重要的职责。车辆自身定位信息获取的方式多样&#xff0c;涉及多种传感器类型与相关技术。自动驾驶汽车能够持续安全可靠运行的一个关键前提是车辆的定位系统必须实时…...

数据结构 | 基本数据结构——队列

目录 一、何谓队列 二、队列抽象数据类型 三、用Python实现队列 四、模拟&#xff1a;传土豆 五、模拟&#xff1a;打印任务 5.1 主要模拟步骤 5.2 Python实现 一、何谓队列 队列是有序集合&#xff0c;添加操作发生在“尾部”&#xff0c;移除操作则发生在“头部”。新…...

QT在label上透明绘图(二)

前面步骤参考前一篇文章 QT在label上透明绘图 一、给TransparentLabel类添加double transparency;变量&#xff0c; 二、ui添加doublespinbox&#xff0c;调整透明参数 void MainWindow::on_doubleSpinBox_valueChanged(double arg1) {transparentLabel->transparencyarg1;…...

微信小程序使用editor富文本编辑器 以及回显 全屏弹窗的模式

<!--富文本接收的位置--><view class"white-box"><view class"title"><view class"yellow-fence"></view><view class"v1">教研记录</view></view><view class"add-btn"…...

在CSDN学Golang场景化解决方案(基于gin框架的web开发脚手架)

一&#xff0c;中间件统一实现Oauth2身份验证 在Golang基于Gin框架开发Web应用程序时&#xff0c;可以使用gin-oauth2来实现Oauth2身份验证。下面是简单的步骤&#xff1a; 安装gin-oauth2包&#xff1a;go get github.com/appleboy/gin-oauth2导入依赖&#xff1a;import &q…...

关于Express 5

目录 1、概述 2、Express 5的变化 2.1 弃用或删除内容的列表&#xff1a; app.param&#xff08;name&#xff0c;fn&#xff09;名称中的前导冒号&#xff08;&#xff1a;&#xff09; app.del() app.param&#xff08;fn&#xff09; 复数方法名 res.json&#xff0…...

ftrace 原理详细分析

》内核新视界文章汇总《 文章目录 ftrace 原理分析1 简介2 ftrace 的编译器支持2.1 HAVE_FUNCTION_TRACER 选项对 ftrace 的支持2.2 HAVE_DYNAMIC_FTRACE 选项对动态 ftrace 的支持 3 ftrace 的初始化4 function trace 流程5 总结 ftrace 原理分析 1 简介 ftrace 是一个内核…...

UWB定位技术和蓝牙AOA有哪些不同?-高精度室内定位技术对比

UWB超宽带定位 UWB&#xff08;Ultra Wide Band &#xff09;即超宽带技术&#xff0c;它是一种无载波通信技术&#xff0c;利用纳秒级的非正弦波窄脉冲传输数据&#xff0c;因此其所占的频谱范围很宽。传统的定位技术是根据信号强弱来判别物体位置&#xff0c;信号强弱受外界…...

【RabbitMQ】golang客户端教程2——工作队列

任务队列/工作队列 在上一个教程中&#xff0c;我们编写程序从命名的队列发送和接收消息。在这一节中&#xff0c;我们将创建一个工作队列&#xff0c;该队列将用于在多个工人之间分配耗时的任务。 工作队列&#xff08;又称任务队列&#xff09;的主要思想是避免立即执行某些…...

芯旺微冲刺IPO,车规级MCU竞争白热化下的“隐忧”凸显

在汽车智能化和电动化发展带来的巨大蓝海市场下&#xff0c;产业链企业迎来了一波IPO小高潮。 日前&#xff0c;上海芯旺微电子技术股份有限公司&#xff08;以下简称“芯旺微”&#xff09;在科创板的上市申请已经被上交所受理&#xff0c;拟募资17亿元&#xff0c;用于投建车…...

HTML <s> 标签

例子 可以像这样标记删除线文本&#xff1a; 在 HTML 5 中&#xff0c;<s>仍然支持</s>已经不支持这个标签了。 浏览器支持 元素ChromeIEFirefoxSafariOpera<s>YesYesYesYesYes 所有浏览器都支持 <s> 标签。 定义和用法 <s> 标签可定义加…...

微信小程序 - scroll-view组件之上拉加载下拉刷新(解决上拉加载不触发)

前言 最近在做微信小程序项目中&#xff0c;有一个功能就是做一个商品列表分页限流然后实现上拉加载下拉刷新功能&#xff0c;遇到了一个使用scroll-viwe组件下拉刷新事件始终不触发问题&#xff0c;网上很多说给scroll-view设置一个高度啥的就可以解决&#xff0c;有些人设置了…...

rust usize与i64怎么比较大小?

在Rust中&#xff0c; usize 和 i64 是不同的整数类型&#xff0c;它们的位数和表示范围可能不同。因此&#xff0c;直接比较 usize 和 i64 是不允许的。如果需要比较它们的大小&#xff0c;可以将它们转换为相同的类型&#xff0c;然后进行比较。 要将 usize 转换为 i64 &…...

电脑更新win10黑屏解决方法

电脑更新win10黑屏解决方法 电脑黑屏出现原因解决步骤 彻底解决 电脑黑屏 出现原因 系统未更新成功就关机&#xff0c;导致系统出故障无法关机 解决步骤 首先长安电源键10s关机 按电源键开机&#xff0c;出现logo时按F8进入安全模式。 进入自动修复环境后&#xff0c;单击…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...