Redis Cluster 模式 的具体实施细节是什么样的?
概述
参考:What are Redis Cluster and How to setup Redis Cluster locally ? | by Rajat Pachauri | Medium
Redis Cluster 的工作原理是将数据分布在多个节点上,同时确保高可用性和容错能力。以下是 Redis Cluster 运行方式的简要概述:
- 节点发现:Redis 集群使用一种称为“gossip 协议”的概念进行节点发现。每个节点都会维护集群中其他节点的列表,并定期与一些随机选择的节点共享有关集群状态的信息。这有助于节点发现和加入集群。
- 数据分片:Redis Cluster 使用一致性哈希将数据划分为多个哈希槽。集群支持 16384 个哈希槽,每个键使用哈希函数映射到特定槽。哈希槽分布在集群中的节点上。
- 主-副本复制:Redis 集群遵循主-副本复制模型。每个哈希槽都与特定的主节点相关联,并且该槽中的数据被复制到一个或多个副本节点。副本提供冗余,并在主节点发生故障时充当故障转移节点。
- 客户端交互:客户端可以连接到 Redis 集群中的任何节点。当客户端发送与特定键相关的命令时,集群会使用该键的哈希槽来确定负责该槽的节点。然后使用 MOVED 或 ASK 重定向响应将客户端透明地重定向到适当的节点。
- 故障转移和高可用性:Redis 集群支持自动故障转移。当主节点发生故障时,其副本之一将自动升级为主节点,从而确保数据的持续可用性。集群使用共识协议来选举新的主节点。客户端通过重定向响应更新新的主节点信息。
- 集群配置:Redis 集群维护一个集群配置,其中包含有关节点、哈希槽和副本的信息。当节点加入或离开集群时,此配置会动态更新。集群节点交换消息以就集群配置达成共识并确保其一致性。
通过在多个节点之间分配数据和负载,Redis Cluster 可实现水平扩展并提高性能。它提供容错能力,因为副本可以接管发生故障的主节点的角色。集群还平衡哈希槽的分布,并确保每个节点负责一部分槽,从而使集群能够高效扩展。
Redis cluster 简介
Redis cluster 是一种去中心化的 Redis 分布式集群解决方案。通过数据自动分片分配到多个主节点之间(每个主节点 都是 主从搭配)、自动故障检测,实现了高可用和高性能。

特点
Redis Cluster 具有以下几个特点:
-
可扩展性(横向扩展):通过向集群添加更多节点,可以增加 Redis 系统的整体容量和吞吐量。
扩展可以分为Las:垂直扩展(scale up)、水平扩展(scale out)
- 垂直拓展:升级单个 Redis 的硬件配置,比如增加内存容量、磁盘容量、使用更强大的 CPU。【部署简单,但是当数据量大并且使用 RDB 实现持久化,会造成阻塞导致响应慢。另外受限于硬件和成本,拓展内存的成本太大,比如拓展到 1T 内存】
- 水平拓展:横向增加 Redis 实例个数,每个节点负责一部分数据。【便于拓展,同时不需要担心单个实例的硬件和成本的限制。但是,切片集群会涉及多个实例的分布式管理问题,需要解决如何将数据合理分布到不同实例,同时还要让客户端能正确访问到实例上的数据】
-
高可用性:主从复制和故障转移机制提高了集群的可靠性。
- 主从复制模式,从节点实时同步主节点的数据。这种结构不仅提高了数据的冗余性,还在主节点出现故障时提供了数据的可用性。
- 故障转移机制:当主节点不可用时,从节点可以自动提升为主节点。这种自动化的故障处理机制减少了人为干预的需求,确保了系统的持续可用性。
使用场景
高并发应用:需要处理大量并发请求的场景,如电商、社交平台。
数据分片需求:需要水平扩展存储容量的场景。
高可用性需求:需要提供数据冗余和自动故障恢复的应用。
优缺点
优点:
- 水平扩展:通过添加节点轻松扩展集群容量。
- 高可用性:主从复制和故障转移机制提高了集群的可靠性。
- 数据分布均衡:哈希槽机制确保数据在集群中均匀分布。
缺点:
- 复杂性增加:集群的配置和管理相较于单节点模式更加复杂。
- 数据一致性问题:可能出现部分数据不可用的情况,需要应用层处理。()
- 资源消耗:维护多个节点的状态需要额外的资源和网络通信。
Redis Cluster 实现原理
数据分片与哈希槽
Redis 的数据分片(sharding)是将 Redis数据集 分割为多个部分,分别存储在不同的 Redis节点上的技术。通过数据分片技术可以将 一个单独的 Redis数据库扩展到多个物理机器上,从而提高 Redis集群的性能、扩展性。
当 16384 个槽都分配完全,Redis 集群才能正常工作。

在Redis的Cluster集群模式中,使用**哈希槽(hash slot)**的方式来进行数据分片,将整个数据集划分为多个槽,每个槽分配给一个节点(这里的节点是由 主、从模式构成的)。
客户端如何访问/插入数据的?
客户端访问数据时,先计算出数据对应的槽,然后直接连接到该槽所在的节点进行操作。具体的:
如何分片的:Redis集群模式中,使用哈希槽(hash slot)的方式将数据分片。
- 首先,将数据集划分为多个槽,每个槽分配给一个节点。(一个节点会对应多个槽)
- 客户端访问数据时,先计算出数据对应的槽,然后连接到该槽所属的 Redis节点上,然后在该节点上访问对应数据。

具体流程为:假设要查询 键为key1的数据
- 对
key1进行哈希计算(使用CRC16算法计算的结果就是 key1的哈希值),假设得到哈希值为12345。 - 对哈希值取模16384,结果为12345。
key1映射到哈希槽12345,由节点B负责。
数据分片的作用
Redis Cluster中的数据分片具有以下特点:
- 提升性能和吞吐量:通过在多个节点上分散数据,可以并行处理更多的操作,从而提升整体的性能
和吞吐量。这在高流量场景下尤其重要,因为单个节点可能无法处理所有请求。 - 提高可扩展性:分片使得Redis可以水平扩展。可以通过添加更多节点扩展数据库的容量和处理能
力。 - 降低单个节点的内存和计算需求:每个节点只处理数据的一部分,这降低了单个节点的内存和计算需求。
- 避免单点故障:在没有分片的情况下,如果唯一的Redis服务器发生故障,整个服务可能会停止。
在分片的环境中,即使一个节点出现问题,其他节点仍然可以继续运行。 - 数据冗余和高可用性:在某些分片策略中,如Redis集群,每个分片的数据都可以在集群内的其他
节点上进行复制。这意味着即使一个节点失败,数据也不会丢失,从而提高了系统的可用性。
节点类型(主节点、从节点)
在 Redis Cluster 中,节点分为两种类型:主节点(Master)和从节点(Slave)。
上面数据分片时所说的 会将数据分片到不同的节点上。这里的节点就是由 一个 master 和 1或多个slave 组成的。
- 主节点:是数据的主要存储位置,负责处理与数据相关的所有操作,如读、写请求,数据分片等。
- 从节点:主要任务是复制主节点的数据。每个主节点可以有一个或多个从节点,从节点实时同步主节点的数据。这种设计保证了数据的冗余性和高可用性。
注意:关于Redis Cluster 中,从节点是否可以支持 读服务?
-
默认情况下从节点不负责处理读服务,所有的写请求和读请求都会被路由到主节点。
-
然而,Redis提供了
READONLY命令,允许客户端将读请求路由到从节点。但是,这种做法需要谨慎,因为它可能会引入一些问题,比如:
- 延迟读取:从节点可能不会立即反映出主节点的最新数据变化,因为数据复制是异步进行的。
- 一致性风险:如果主从节点之间的网络延迟较大,从节点可能会提供过时的数据
Redis Cluster 的通信协议:Gossip 协议
Redis 的集群节点之间的通信采取 gossip 协议进行通信,在 redis cluster 架构下,每个 redis 要放开两个端口号,比如一个是 6379,另外一个就是 加10000 的端口号,比如 16379,16379 端口号是用来进行节点间通信的。
Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。
Gossip protocol (流言协议),是利用一种 随机、带有传染性的方式,将信息传播到整个网络中,并在一定时间内,使得系统内所有节点数据一致。
Gossip协议的执行过程简答描述为:Gossip 过程是由种子节点发起,当一个种子节点有状态需要更新到网络中的其他节点时,它会随机的选择周围几个节点散播消息,收到消息的节点也会重复该过程,直至最终网络中所有的节点都收到了消息。这个过程可能需要一定的时间,由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。

Gossip协议优缺点
优点:
- 扩展性 网络可以允许节点的任意增加和减少,新增加的节点的状态最终会与其他节点一致。
- 容错 网络中任何节点的宕机和重启都不会影响 Gossip 消息的传播,Gossip 协议具有天然的分布式系统容错特性。
- 去中心化 Gossip 协议不要求任何中心节点,所有节点都可以是对等的,任何一个节点无需知道整个网络状况,只要网络是连通的,任意一个节点就可以把消息散播到全网。
- 一致性收敛 Gossip 协议中的消息会以一传十、十传百一样的指数级速度在网络中快速传播,因此系统状态的不一致可以在很快的时间内收敛到一致。消息传播速度达到了 logN。
- 简单 Gossip 协议的过程极其简单,实现起来几乎没有太多复杂性。
缺点:
- 消息的延迟 由于 Gossip 协议中,节点只会随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网的,因此使用 Gossip 协议会造成不可避免的消息延迟。不适合用在对实时性要求较高的场景下。
- 消息冗余 Gossip 协议规定,节点会定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,因此就不可避免的存在消息重复发送给同一节点的情况,造成了消息的冗余,同时也增加了收到消息的节点的处理压力。而且,由于是定期发送,因此,即使收到了消息的节点还会反复收到重复消息,加重了消息的冗余。
Redis Cluster的Gossip机制
Redis Cluster 是在 3.0 版本引入集群功能。为了让让集群中的每个实例都知道其他所有实例的状态信息,Redis 集群规定各个实例之间按照 Gossip 协议来通信传递信息。
上图展示了主从架构的 Redis Cluster 示意图,其中:
- 实线表示节点间的主从复制关系,
- 虚线表示各个节点之间的 Gossip 通信。
Redis Cluster 中的每个节点都维护一份自己视角下的当前整个集群的状态信息(元数据信息),主要包括:
- 当前集群状态
- 集群中各节点所负责的 slots信息,及其migrate状态
- 集群中各节点的master-slave状态
- 集群中各节点的存活状态及怀疑Fail状态
Redis Cluster 的节点之间发送消息的类型
知道了 节点之间是通过 Gossip 协议进行消息的发送,现在来看看它们之间发送消息的类型。较为重要的如下所示:
| 消息 | 说明 |
|---|---|
meet | 通过「cluster meet ip port」命令,已有集群的节点会向新的节点发送邀请,加入现有集群,然后新节点就会开始与其他节点进行通信 |
ping | 节点按照配置的时间间隔向集群中其他节点发送 ping 消息,消息中带有自己的状态,还有自己维护的集群元数据,和部分其他节点的元数据 |
pong | 返回ping和meet,包含自己的状态和其他信息,也可以用于信息广播和更新 |
fail | 某个节点判断另一个节点fail之后,就发送fail给其他节点,通知其他节点,指定的节点宕机了 |
定时ping/pong消息(心跳机制)
Redis Cluster 中的节点都会定时地向其他节点发送 PING 消息,来交换各个节点状态信息,检查各个节点状态,包括在线状态、疑似下线状态 PFAIL 和已下线状态 FAIL。
Redis 集群的定时 PING/PONG 的工作原理可以概括成两点:
-
一是,每个实例之间会按照一定的频率,从集群中随机挑选一些实例,把 PING 消息发送给挑选出来的实例,用来检测这些实例是否在线,并交换彼此的状态信息。
例自身的状态信息、部分其它实例的状态信息,以及 Slot 映射表。
-
二是,一个实例在接收到 PING 消息后,会给发送 PING 消息的实例,发送一个 PONG 消息。PONG 消息包含的内容和 PING 消息一样。

故障检测与自动故障转移
Redis Cluster保证高可用(High Availability)主要还是依靠:故障检测与故障转移。
自动故障检测
故障检测的机制如下(通过Gossip协议发送消息进行检测):
关于节点参与情况说明:
- 主观下线:每个节点(包括主节点和从节点)都会检测其他节点的状态。如果检测到某个节点不可用,会将其标记为主观下线(PFAIL)。
- 客观下线:主节点之间会交换彼此的主观下线状态,如果超过半数的主节点都认为某个节点不可用,则该节点会被标记为客观下线(FAIL)。
-
疑似下线:Redis Cluster 中的节点会定期检查已经发送
PING消息(即上述的心跳机制)的接收方节点是否在规定时间 (cluster-node-timeout) 内返回了PONG消息,如果没有则会将其标记为疑似下线状态(possible fail,PFAIL)。

-
客观下线:当一个节点将另一个节点标记为"疑似失败"后,它会通过Gossip协议将这个信息传播给其他节点。如果一个节点从大多数主节点那里都收到了某个节点的"疑似失败"信息,那么这个节点将被标记为"客观失败"(FAIL)。并将该节点 客观下线的信息,发送给所有节点。
这时,集群会触发故障转移流程,从失败节点的从节点中选举一个新的主节点。
自动故障转移
节点参与情况说明:
从节点投票:当一个主节点被标记为客观下线后,它的从节点会发起故障转移过程。故障转移请求会被发送到其他主节点,以请求授权进行故障转移。
授权投票:其他主节点会对故障转移请求进行投票,同意票数超过半数后,候选从节点会被提升为新的主节点。
当Redis Cluster中的主节点被标记为客观下线(FAIL)时,会触发故障转移(failover)流程。故障转移(failover)是指当主节点不可用时,从节点自动提升为新的主节点,以保证集群的高可用性。故障转移的流程包括以下几个步骤:
- 投票选举:被标记为客观下线的主节点的从节点会尝试提升为主节点。
- 这些从节点会向集群中的其他主节点请求支持,开始选举过程。
- 各个主节点会根据从节点的优先级(配置文件中的
slave-priority参数)、复制偏移量(replication offset)等因素进行投票。
- 选择新的主节点:
- 得到多数票(超过半数)的从节点会被提升为新的主节点。
- 如果没有从节点得到足够的票数,则选举失败,并在短时间后重试。
- 配置更新:当选举出新的主节点后,该主节点会通知所有的其他节点,告知他是新的主节点。
- 数据同步:原主节点的从节点现在会成为新主节点的从节点,并开始从新主节点同步数据。如果原主节点恢复后重新加入集群,它也会成为新主节点的从节点,并从新主节点同步数据。
重定向
为什么需要重定向
当客户端第一次连接到 Redis Cluster 时,它会连接到集群中的一个节点(通常是配置好的一个或多个节点之一)。这个节点会提供当前集群的拓扑结构,包括每个节点负责的哈希槽范围。
但是,后续如果节点进行扩容、缩容之后,每个节点的哈希槽范围会改变。此时,客户端是无法感知的。
之后通过重定向一次之后,客户端会根据节点返回 MOVED 或 ASK 错误,客户端更新其拓扑结构,并将请求重发到新的节点。
在此之后,客户端维护的拓扑结构更新到最新的状态。
一句话:在 Redis Cluster 中,每个键通过哈希槽分配到不同的节点。如果你向某个节点写入数据,但该数据应该存储在另一个节点上,Redis Cluster 会返回重定向指令,告诉你应该访问哪个节点。这确保了数据的分布和存取的正确性。
重定向指令类型
MOVED:当客户端请求的键在另一个节点上时,节点会返回MOVED指令。该指令包含目标节点的地址。客户端收到MOVED指令后,会重新请求目标节点。
ASK:在数据迁移过程中,如果某个键正在从一个节点迁移到另一个节点,当客户端请求这个键时,节点会返回ASK指令。ASK指令告诉客户端临时访问新的目标节点,通常在数据迁移完成之前。
MOVED指令
重定向过程的详细步骤:
- 初始请求:客户端向节点A发送请求,如果键不在节点A的哈希槽范围内。
- 返回
MOVED指令:节点A返回一个MOVED指令,包含目标节点B的地址。 - 客户端重试:客户端向节点B重新发送请求。
- 返回结果:节点B处理请求并返回结果。
注意:重定向MOVED类型,客户端还会更新本地缓存,将该 slot 与 Redis 实例对应关系更新正确。
ASK指令
-
迁移过程中的请求:如果某个键正在从节点A迁移到节点B,客户端请求这个键时,节点A会返回一个
ASK指令。 -
临时访问:客户端向节点B发送请求,并在请求前发送
ASKING指令,表明这是一次临时访问。 -
数据迁移完成后:客户端可以正常访问节点B,不再需要发送
ASKING指令。
注意:ASK 指令并不会更新客户端缓存的哈希槽分配信息。

扩容、缩容
缩容原理
缩容流程:
- 选择要移除的节点
- 哈希槽重分配:在缩容过程中,首先需要将要移除节点上的哈希槽迁移到其他节点。这样可以确保数据的完整性和一致性。
- 数据迁移:哈希槽的迁移意味着对应数据的迁移,Redis Cluster会自动将数据从一个节点复制到另一个节点。
- 将节点从集群中移除
- 更新集群状态:集群状态会随时更新,以反映哈希槽和数据的迁移情况。
- 移除节点:一旦所有数据和哈希槽迁移完成,就可以安全地将节点从集群中移除。
扩容原理
扩容流程:
- 启动新节点
- 将新节点加入集群
- 重新分配哈希槽:在扩容过程中,需要将部分哈希槽从现有节点迁移到新节点,以确保数据分布均匀。哈希槽的重新分配可以通过手动指定或者使用
reshard命令自动进行。 - 数据迁移:哈希槽迁移意味着对应数据的迁移,Redis Cluster会自动将数据从一个节点复制到另一个节点。数据迁移过程中,Redis Cluster会确保数据的一致性和完整性。
- 更新集群状态:集群状态会随时更新,以反映哈希槽和数据的迁移情况。新节点加入集群后,集群中的其他节点会通过Gossip协议感知新节点的存在,并更新自己的拓扑信息。
- 验证集群状态
主、从节点如何建立的通信
步骤如下:
- 初始配置:每个节点启动时都会加载其配置文件,其中包含节点的 ID、集群状态和分配的哈希槽信息。如果是从节点,还会配置它所跟随的主节点信息。
- 启动节点、发现节点、加入集群:节点通过 Gossip 协议发现和加入集群。每个节点会周期性地向其他节点发送 PING 消息,接收 PONG 响应,了解对方的存在和状态。
主从节点建立关系:- 从节点启动时,根据配置文件中的信息,向其指定的主节点发送复制请求(PSYNC)。
- 主节点接收请求后,开始向从节点复制数据。
- 复制完成后,从节点进入同步状态,定期向主节点发送 ACK 消息,确认接收到的数据。
复制请求(PSYNC)
这里的复制请求(PSYNC)主要使用的是 Redis 协议(REdis Serialization Protocol, RESP)。
RESP(Redis Serialization Protocol) 是 Redis 的内部协议,用于客户端和服务器之间的通信,也用于 Redis 集群节点之间的通信。该协议简单、高效且便于实现。
复制请求(PSYNC)的流程:
-
读取
replicaof指令,获取主节点信息:-
从节点的配置文件中会包含一条
replicaof指令,用于指定它要跟随的主节点的 IP 地址和端口。例如:port 7001 cluster-enabled yes cluster-config-file nodes-7001.conf cluster-node-timeout 5000 appendonly yes replicaof 127.0.0.1 7000 -
启动从节点,当从节点启动时,它会读取配置文件并解析
replicaof指令。
-
-
连接主节点:从节点根据
replicaof指令中指定的 IP 地址和端口,尝试连接主节点。 -
发送
PSYNC命令:一旦连接成功,从节点会向主节点发送PSYNC命令以请求复制。PSYNC命令用于部分重同步或全量重同步。PSYNC <replicationid> <offset> -
主节点响: 主节点接收到
PSYNC命令后,就可以开始数据复制同步了。
参考
- Redis 高可用篇:Cluster 集群原理剖析,集群可以无限拓展么_redis cluster_码哥字节_InfoQ写作社区
- What are Redis Cluster and How to setup Redis Cluster locally ? | by Rajat Pachauri | Medium
- Redis Cluster集群节点间通信:Gossip协议 | 浮生无事Blog (fushengwushi.com)
- 认识Redis集群——Redis Cluster - JJian - 博客园 (cnblogs.com)
- Redis 高可用篇:Cluster 集群原理剖析,集群可以无限拓展么_redis cluster_码哥字节_InfoQ写作社区
相关文章:
Redis Cluster 模式 的具体实施细节是什么样的?
概述 参考:What are Redis Cluster and How to setup Redis Cluster locally ? | by Rajat Pachauri | Medium Redis Cluster 的工作原理是将数据分布在多个节点上,同时确保高可用性和容错能力。以下是 Redis Cluster 运行方式的简要概述: …...
基于大模型的机器人控制
基于大模型的机器人控制是指利用深度学习中的大型神经网络模型来实现对机器人的精确控制。这种方法结合了深度学习的强大表征学习能力和机器人控制的实际需求,旨在提高机器人的自主性、灵活性和智能性。 基本原理 数据收集:首先,需要收集大量…...
在 PostgreSQL 中,如何处理数据的版本控制?
文章目录 一、使用时间戳字段进行版本控制二、使用版本号字段进行版本控制三、使用历史表进行版本控制四、使用 RETURNING 子句获取更新前后的版本五、使用数据库触发器进行版本控制 在 PostgreSQL 中,处理数据的版本控制可以通过多种方式实现,每种方式都…...
Rust 组织管理
Rust 组织管理 Rust 是一种系统编程语言,以其内存安全性、速度和并发性而闻名。它由 Mozilla 开发,并得到了一个庞大而活跃的社区的支持。Rust 的组织管理涉及多个方面,包括项目管理、社区参与、工具和库的维护,以及生态系统的整…...
vb.netcad二开自学笔记1:万里长征第一步Hello CAD!
已入门的朋友请绕行! 今天开启自学vb.net 开发autocad,网上相关资料太少了、太老了。花钱买课吧,穷!又舍不得,咬牙从小白开始摸索自学吧,虽然注定是踏上了一条艰苦之路,顺便作个自学笔记备忘!积…...
Vue的学习之数据与方法
前段期间,由于入职原因没有学习,现在已经正式入职啦,接下来继续加油学习。 一、数据与方法 文字备注已经在代码中,方便自己学习和理解 <!DOCTYPE html> <html><head><meta charset"utf-8">&l…...
刷题——在二叉树中找到最近公共祖先
在二叉树中找到两个节点的最近公共祖先_牛客题霸_牛客网 int lowestCommonAncestor(TreeNode* root, int o1, int o2) {if(root NULL) return -1;if((root->val o1) || (root->val o2)) return root->val;int left lowestCommonAncestor(root->left, o1, o2);i…...
nginx(三)—从Nginx配置熟悉Nginx功能
一、 Nginx配置文件结构 ... #全局块events { #events块... }http #http块 {... #http全局块server #server块{ ... #server全局块location [PATTERN] #location块{...}location [PATTERN] {...}}server{...}... #http全局块 …...
Python轮子:文件比较器——filecmp
原文链接:http://www.juzicode.com/python-module-filecmp filecmp模块可以用来比较文件或者目录。 安装和导入 filecmp是Python自带的模块,不需要额外安装,直接导入即可: import filecmp as fc #或者 import filecmp cmp()比较…...
uni-app组件 子组件onLoad、onReady事件无效
文章目录 导文解决方法 导文 突然发现在项目中,组件 子组件的onLoad、onReady事件无效 打印也出不来值 怎么处理呢? 解决方法 mounted() {console.log(onLoad, this.dateList);//有效// this.checkinDetails()},onReady() {console.log(onReady, this.da…...
leetcode力扣_排序问题
215.数组中的第K个最大元素 鉴于已经将之前学的排序算法忘得差不多了,只会一个冒泡排序法了,就写了一个冒牌排序法,将给的数组按照降序排列,然后取nums[k-1]就是题目要求的,但是提交之后对于有的示例显示”超出时间限制…...
在 .NET 8 Web API 中实现弹性
在现代 Web 开发中,构建弹性 API 对于确保可靠性和性能至关重要。本文将指导您使用 Microsoft.Extensions.Http.Resilience 库在 .NET 8 Web API 中实现弹性。我们将介绍如何设置重试策略和超时,以使您的 API 更能抵御瞬时故障。 步骤 1.创建一个新的 .…...
linux下高级IO模型
高级IO 1.高级IO模型基本概念1.1 阻塞IO1.2 非阻塞IO1.3 信号驱动IO1.4 IO多路转接1.5 异步IO 2. 模型代码实现2.1 非阻塞IO2.2 多路转接-selectselect函数介绍什么才叫就绪呢?demoselect特点 2.3 多路转接-pollpoll函数介绍poll优缺点demo 2.4 多路转接-epoll&…...
掌握Mojolicious会话管理:构建安全、持久的Web应用
掌握Mojolicious会话管理:构建安全、持久的Web应用 Mojolicious是一个基于Perl的高性能、异步Web开发框架,它提供了一套完整的工具来构建现代Web应用。会话管理是Web开发中的一个关键组成部分,它允许应用识别和保持用户的登录状态。本文将深…...
24西安电子科技大学马克思主义学院—考研录取情况
01、马克思主义学院各个方向 02、24马克思主义学院近三年复试分数线对比 PS:马院24年院线相对于23年院线增加15分,反映了大家对于马克思主义理论学习与研究的热情高涨,也彰显了学院在人才培养、学科建设及学术研究等方面的不断进步与成就。 6…...
12--RabbitMQ消息队列
前言:前面一章内容太多,写了kafka,这里就写一下同类产品rabbitmq,rabbitmq内容较少,正好用来过度一下,概念还是会用一些例子来说明,实际部署的内容会放在概念之后。 1、基础概念 1.1、MQ消息队…...
VMware替换关键技术:核心业务系统中,访存密集型应用的性能优化
越来越多用户采用虚拟化、超融合以及云平台环境来承载其核心业务,核心业务的高并发对性能的要求尤为严格,在VMware替换的热潮下,原VMware用户也更为关注新平台在核心业务上的性能表现是否对标,或实现超越。深信服将通过系列解析&a…...
[单master节点k8s部署]20.监控系统构建(五)Alertmanager
prometheus将监控到的异常事件发送给Alertmanager,然后Alertmanager将报警信息发送到邮箱等设备。可以从下图看出,push alerts是由Prometheus发起的。 安装Alertmanager config文件 [rootmaster prometheus]# cat alertmanager-cm.yaml kind: ConfigMa…...
用MySQL+node+vue做一个学生信息管理系统(四):制作增加、删除、修改的组件和对应的路由
1.下载依赖: npm install vue-router 在src目录下新建一个文件夹router,在router文件夹下新建一个文件router.js文件,在component目录下新建增加删除和修改的组件,引入router.js当中 此时的init组件为主页面((二、三&…...
磁盘就是一个超大的Byte数组,操作系统是如何管理的?
磁盘在操作系统的维度看,就是一个“超大的Byte数组”。 那么操作系统是如何对这块“超大的Byte数组”做管理的呢? 我们知道在逻辑上,上帝说是用“文件”的概念来进行管理的。于是,便有了“文件系统”。那么,文件系统…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
Axure Rp 11 安装、汉化、授权
Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接:https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…...
Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)
13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…...
