Redis Cluster介绍

nvprof:CUDA编程性能分析工具 NVIDIA提供了具有高性能计算的GPU产品,如何检验硬件的实际性能,写出高效的CUDA代码让算力加速卡物尽其用,那可以通过其配套提供的“护城河”软件工具链来检验和帮助发挥GPU的性能:nvprof。如下,对于将8192个A,B向量进行向量加法运算,即C[i] = A[i] + B[i],当软件设置不同的blocknum, threadnum时候,CUDA执行kernel的时间是不同的。比如如下命令,可以看到程序tmp1的总体性能,下面一行是打印gpu的执行时间情况。 阅读详情

1. Redis Cluster介绍

Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。

1.1 数据分布理论

分布式数据库首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。常见的分区规则有哈希分区和顺序分区。Redis Cluster采用哈希分区规则,因此接下来会讨论哈希分区规则。常见的哈希分区有以下几种:

  • 节点取余分区
  • 一致性哈希分区
  • 虚拟槽分区

Redis Cluster采用虚拟槽分区,因此先介绍一下虚拟槽分区。

虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。比如Redis Cluster槽的范围是0 ~ 16383。槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展,每个节点负责一定数量的槽。

Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有 节点连接。其redis-cluster架构图如下:

这里写图片描述

其结构特点:

  • 一般来讲,一个主节点至少都要配一个从节点。
  • 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。包括从节点也会接收Gossip消息。
  • 节点的fail是通过集群中超过半数的节点检测失效时才生效。
  • 客户端与redis节点直连,不需要中间proxy层。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
  • redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node、slot、value之间的对应关系。
  • Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

1.2 Redis 数据分区

Redis Cluster采用虚拟槽分区,所有的键根据哈希函数映射到0 ~ 16383,计算公式:slot = CRC16(key)&16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。

下图展现一个五个节点构成的集群,每个节点平均大约负责3276个槽,以及通过计算公式映射到对应节点的对应槽的过程。

这里写图片描述

Redis虚拟槽分区的特定:

  • 解耦数据和节点之间的关系,简化了节点扩容和收缩难度。
  • 节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据。
  • 支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景。

1.3 Redis 集群功能限制

Redis集群相对单机在功能上有一定限制。

  • key批量操作支持有限。如:MSET``MGET,目前只支持具有相同slot值的key执行批量操作。
  • key事务操作支持有限。支持多key在同一节点上的事务操作,不支持分布在多个节点的事务功能。
  • key作为数据分区的最小粒度,因此不能将一个大的键值对象映射到不同的节点。如:hash、list。
  • 不支持多数据库空间。单机下Redis支持16个数据库,集群模式下只能使用一个数据库空间,即db 0。
  • 复制结构只支持一层,不支持嵌套树状复制结构。

2. 搭建 Redis Cluster

搭建集群工作分为三步:

  • 准备节点
  • 节点握手
  • 分配槽

2.1 准备节点

Redis 集群一般由多个节点组成,节点数量为6个才能保证组成完整高可用的集群。下面给出一个节点的配置,其他的节点和该节点只是端口不同。

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

启动所有的节点

sudo redis-server conf/redis-6384.conf
sudo redis-server conf/redis-6383.conf
sudo redis-server conf/redis-6382.conf
sudo redis-server conf/redis-6381.conf
sudo redis-server conf/redis-6380.conf
sudo redis-server conf/redis-6379.conf123456

可以查看日志文件

cat log/redis-6379.log
13103:M 30 May 15:02:09.577 * DB loaded from disk: 0.000 seconds
13103:M 30 May 15:02:09.578 * The server is now ready to accept connections on port 6379123

有日志文件可得,节点已经启动成功。这个日志文件是Redis服务器普通的日志文件,在集群模式下,第一次也会自动创建一个日志文件,由配置文件cluster-config-file指定文件。

集群配置文件的作用:当集群内节点发生信息变化时,如添加节点、节点下线、故障转移等。节点会自动保存集群的状态到配置文件中。该配置文件由Redis自行维护,不要手动修改,防止节点重启时产生集群信息错乱。我们来查看一下,集群模式的日志文件:

cat nodes-6379.conf 
29978c0169ecc0a9054de7f4142155c1ab70258b :0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0123

也可以通过客户端连接该节点,通过命令CLUSTER NODES来查看:

127.0.0.1:6379> CLUSTER NODES
29978c0169ecc0a9054de7f4142155c1ab70258b :6379 myself,master - 0 0 0 connected12

2.2 节点握手

节点握手是指一批运行在集群模式的节点通过Gossip协议彼此通信,达到感知对方的过程。节点握手是集群彼此通信的第一步,由客户端发起命令:cluster meet <ip> <port>

127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6380
OK
// 发送CLUSTER NODES可以查看到已经感知到 6380 端口的节点了。
127.0.0.1:6379> CLUSTER NODES
29978c0169ecc0a9054de7f4142155c1ab70258b 127.0.0.1:6379 myself,master - 0 0 1 connected
8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 master - 0 1496129041442 0 connected123456

让所有的节点都互相感知:

127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6381
OK
127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6382
OK
127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6383
OK
127.0.0.1:6379> CLUSTER MEET 127.0.0.1 6384
OK
// 已经全部感知到所有的节点
127.0.0.1:6379> CLUSTER NODES
e0c7961a1b07ab655bc31d8dfd583da565ec167d 127.0.0.1:6384 master - 0 1496129143703 0 connected
961097d6be64ebd2fd739ff719e97565a8cee7b5 127.0.0.1:6382 master - 0 1496129141678 0 connected
29978c0169ecc0a9054de7f4142155c1ab70258b 127.0.0.1:6379 myself,master - 0 0 1 connected
8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 master - 0 1496129142682 3 connected
6fb7dfdb6188a9fe53c48ea32d541724f36434e9 127.0.0.1:6383 master - 0 1496129145699 4 connected
66478bda726ae6ba4e8fb55034d8e5e5804223ff 127.0.0.1:6381 master - 0 1496129147704 2 connected12345678910111213141516

当前已经使这六个节点组成集群,但是现在还无法工作,因为集群节点还没有分配槽(slot)。


2.3 分配槽

可以看一下6379端口的槽个数

127.0.0.1:6379> CLUSTER INFO
cluster_state:fail
cluster_slots_assigned:0            // 被分配槽的个数为0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_sent:479
cluster_stats_messages_received:479123456789101112

接下来为节点分配槽空间。通过cluster addslots命令。

redis-cli -h 127.0.0.1 -p 6379 cluster addslots {0..5461}
OK
redis-cli -h 127.0.0.1 -p 6380 cluster addslots {5462..10922}
OK
redis-cli -h 127.0.0.1 -p 6381 cluster addslots {10923..16383}
OK123456

我们将16383个槽平均分配给6379、6380、6381端口的节点。再次执行CLUSTER INFO查看一下集群的状态:

127.0.0.1:6379> CLUSTER INFO
cluster_state:ok                // 集群状态OK
cluster_slots_assigned:16384    // 已经分配了所有的槽
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_sent:1212
cluster_stats_messages_received:1212123456789101112

可以通过CLUSTER NODES来查看分配情况:

127.0.0.1:6379> CLUSTER NODES
e0c7961a1b07ab655bc31d8dfd583da565ec167d 127.0.0.1:6384 master - 0 1496129666347 0 connected
961097d6be64ebd2fd739ff719e97565a8cee7b5 127.0.0.1:6382 master - 0 1496129664844 5 connected
29978c0169ecc0a9054de7f4142155c1ab70258b 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5461
8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 master - 0 1496129665846 3 connected 5462-10922
6fb7dfdb6188a9fe53c48ea32d541724f36434e9 127.0.0.1:6383 master - 0 1496129661838 4 connected
66478bda726ae6ba4e8fb55034d8e5e5804223ff 127.0.0.1:6381 master - 0 1496129666848 2 connected 10923-163831234567

目前还有三个节点没有使用,作为一个完整的集群,每个负责处理槽的节点应该具有从节点,保证当主节点出现故障时,可以自动进行故障转移。集群模式下,首次启动的节点和被分配槽的节点都是主节点,从节点负责复制主节点槽的信息和相关数据。使用cluster replicate <nodeid>在从节点上执行。

redis-cli -h 127.0.0.1 -p 6382 cluster replicate 29978c0169ecc0a9054de7f4142155c1ab70258b
OK
redis-cli -h 127.0.0.1 -p 6383 cluster replicate 8f285670923d4f1c599ecc93367c95a30fb8bf34
OK
redis-cli -h 127.0.0.1 -p 6384 cluster replicate 66478bda726ae6ba4e8fb55034d8e5e5804223ff
OK123456

通过CLUSTER NODES可以查看集群节点的状态

127.0.0.1:6379> CLUSTER NODES
e0c7961a1b07ab655bc31d8dfd583da565ec167d 127.0.0.1:6384 slave 66478bda726ae6ba4e8fb55034d8e5e5804223ff 0 1496130082754 2 connected
961097d6be64ebd2fd739ff719e97565a8cee7b5 127.0.0.1:6382 slave 29978c0169ecc0a9054de7f4142155c1ab70258b 0 1496130080749 5 connected
29978c0169ecc0a9054de7f4142155c1ab70258b 127.0.0.1:6379 myself,master - 0 0 1 connected 0-5461
8f285670923d4f1c599ecc93367c95a30fb8bf34 127.0.0.1:6380 master - 0 1496130078744 3 connected 5462-10922
6fb7dfdb6188a9fe53c48ea32d541724f36434e9 127.0.0.1:6383 slave 8f285670923d4f1c599ecc93367c95a30fb8bf34 0 1496130079747 4 connected
66478bda726ae6ba4e8fb55034d8e5e5804223ff 127.0.0.1:6381 master - 0 1496130081751 2 connected 10923-16383
12345678

这样就完成了一个3主3从的Redis集群搭建。如下图所示:

这里写图片描述


3. 新增节点

3.1 新增主节点

新增主节点实际上就是添加一个主机后再迁移槽和数据,迁移工作可以用Ruby工具redis-trib.rb完成。

(1)新增一个节点7007作为主节点修改配置文件:

[root@localhost redis-cluster]# cp -r  redis01 redis07  
[root@localhost redis-cluster]# cd redis07/  
[root@localhost redis07]# sed -i "s/7001/7007/g" ./redis.conf 

(2)启动7007redis服务:

[root@localhost redis07]# ./redis-server redis.conf   
[root@localhost redis07]# netstat -anp | grep 7007  
tcp        0      0 127.0.0.1:17007         0.0.0.0:*               LISTEN      13441/./redis-serve   
tcp        0      0 127.0.0.1:7007          0.0.0.0:*               LISTEN      13441/./redis-serve

(3)添加使用redis-trib.rb的add-node命令:

[root@localhost redis-cluster]# ./redis-trib.rb add-node 127.0.0.1:7007 127.0.0.1:7002  
>>> Adding node 127.0.0.1:7007 to cluster 127.0.0.1:7002  
>>> Performing Cluster Check (using node 127.0.0.1:7002)  
S: 1f07d76585bfab35f91ec711ac53ab4bc00f2d3a 127.0.0.1:7002  
   slots: (0 slots) slave  
   replicates a5db243087d8bd423b9285fa8513eddee9bb59a6  
M: f9886c71e98a53270f7fda961e1c5f730382d48f 127.0.0.1:7003  
   slots:10923-16383 (5461 slots) master  
   1 additional replica(s)  
M: a5db243087d8bd423b9285fa8513eddee9bb59a6 127.0.0.1:7005  
   slots:5461-10922 (5462 slots) master  
   1 additional replica(s)  
S: 50ce1ea59106b4c2c6bc502593a6a7a7dabf5041 127.0.0.1:7004  
   slots: (0 slots) slave  
   replicates dd19221c404fb2fc4da37229de56bab755c76f2b  
S: 8bb3ede48319b46d0015440a91ab277da9353c8b 127.0.0.1:7006  
   slots: (0 slots) slave  
   replicates f9886c71e98a53270f7fda961e1c5f730382d48f  
M: dd19221c404fb2fc4da37229de56bab755c76f2b 127.0.0.1:7001  
   slots:0-5460 (5461 slots) master  
   1 additional replica(s)  
[OK] All nodes agree about slots configuration.  
>>> Check for open slots...  
>>> Check slots coverage...  
[OK] All 16384 slots covered.  
>>> Send CLUSTER MEET to node 127.0.0.1:7007 to make it join the cluster.  
[OK] New node added correctly.  
[root@localhost redis-cluster]#   

add-node是加入集群节点,127.0.0.1:7007为要加入的节点,127.0.0.1:7002 表示加入的集群的一个节点,用来辨识是哪个集群,理论上那个集群的节点都可以。

(4)check一下新节点的状态:

[root@localhost redis-cluster]# ./redis-trib.rb check 127.0.0.1:7007  
>>> Performing Cluster Check (using node 127.0.0.1:7007)  
M: ee3efb90e5ac0725f15238a64fc60a18a71205d7 127.0.0.1:7007  
   slots: (0 slots) master  
   0 additional replica(s) 
……

上面信息可以看到有4个M节点,3个S节点,7007成为了M主节点,它没有附属的从节点,而且Cluster并未给7007分配哈希卡槽(0 slots)。

(5)reshard

redis-cluster在新增节点时并未分配卡槽,需要我们手动对集群进行重新分片迁移数据,需要重新分片命令 reshard:

[root@localhost redis-cluster]# ./redis-trib.rb reshard 127.0.0.1:7005 
……
[OK] All nodes agree about slots configuration.  
>>> Check for open slots...  
>>> Check slots coverage...  
[OK] All 16384 slots covered.  

# 它提示我们需要迁移多少slot到7007上,我们平分16384个哈希槽给4个节点:16384/4 = 4096,我们需要移动4096个槽点到7007上。
How many slots do you want to move (from 1 to 16384)? 
4096

# 需要输入7007的节点id,ee3efb90e5ac0725f15238a64fc60a18a71205d7
What is the receiving node ID?   
ee3efb90e5ac0725f15238a64fc60a18a71205d7

# redis-trib 会向你询问重新分片的源节点(source node),即,要从特点的哪个节点中取出 4096 个哈希槽,还是从全部节点提取4096个哈希槽, 并将这些槽移动到7007节点上面。

# 如果我们不打算从特定的节点上取出指定数量的哈希槽,那么可以向redis-trib输入 all,这样的话, 集群中的所有主节点都会成为源节点,redis-trib从各个源节点中各取出一部分哈希槽,凑够4096个,然后移动到7007节点上
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.  
Source node #1:  
all 

然后开始从别的主节点迁移哈希槽,并且确认。确认之后,redis-trib就开始执行分片操作,将哈希槽一个一个从源主节点移动到7007目标主节点。重新分片结束后我们可以check以下节点的分配情况:

[root@localhost redis-cluster]# ./redis-trib.rb check 127.0.0.1:7001  
>>> Performing Cluster Check (using node 127.0.0.1:7001)  
M: dd19221c404fb2fc4da37229de56bab755c76f2b 127.0.0.1:7001  
   slots:1365-5460 (4096 slots) master  
   1 additional replica(s)  
M: ee3efb90e5ac0725f15238a64fc60a18a71205d7 127.0.0.1:7007  
   slots:0-1364,5461-6826,10923-12287 (4096 slots) master  
   0 additional replica(s) 

   ……

slots:0-1364,5461-6826,10923-12287 (4096 slots) master: 可以看到7007节点分片的哈希槽片不是连续的,间隔的移动。


3.2 新增从节点

(1)新增一个节点7008节点,使用add-node —slave命令:

[root@localhost redis-cluster]# cp -r redis01/ redis08  
[root@localhost redis-cluster]# cd redis08/  
[root@localhost redis08]# sed -i "s/7001/7008/g" ./redis.conf  
[root@localhost redis08]# ./redis-server redis.conf   
……
[root@localhost redis-cluster]# ./redis-trib.rb add-node --slave 127.0.0.1:7008 127.0.0.1:7001>>> Adding node 127.0.0.1:7008 to cluster 127.0.0.1:7001

nodeid为要加到master主节点的node id,127.0.0.1:7008为新增的从节点,127.0.0.1:7000为集群的一个节点(集群的任意节点都行),用来辨识是哪个集群;如果没有给定那个主节点--master-id的话,redis-trib将会将新增的从节点随机到从节点较少的主节点上。


4. 移除节点

4.1 移除主节点

移除节点使用redis-trib的del-node命令:

[root@localhost redis-cluster]# ./redis-trib.rb del-node 127.0.0.1:7002 dd19221c404fb2fc4da37229de56bab755c76f2b
>>> Removing node dd19221c404fb2fc4da37229de56bab755c76f2b from cluster 127.0.0.1:7002  
[ERR] Node 127.0.0.1:7001 is not empty! Reshard data away and try again.  
[root@localhost redis-cluster]#   

127.0.0.1:7002为集群节点,dd19221c404fb2fc4da37229de56bab755c76f2b为要删除的主节点的ID。redis cluster提示7001已经有数据了,不能够被删除,需要将他的数据转移出去,也就是和新增主节点一样需重新分片。

(1)利用reshard将7001上的槽移到其他节点

[root@localhost redis-cluster]# ./redis-trib.rb reshard 127.0.0.1:7002  

>> Check for open slots...  
>>> Check slots coverage...  
[OK] All 16384 slots covered.  
How many slots do you want to move (from 1 to 16384)?   
4096

What is the receiving node ID?
all

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.  
Source node #1:  dd19221c404fb2fc4da37229de56bab755c76f2b
Source node #2:done  
Do you want to proceed with the proposed reshard plan (yes/no)? yes  

(2)删除7001

[root@localhost redis-cluster]# ./redis-trib.rb del-node 127.0.0.1:7002 dd19221c404fb2fc4da37229de56bab755c76f2b  
>>> Removing node dd19221c404fb2fc4da37229de56bab755c76f2b from cluster 127.0.0.1:7002  
>>> Sending CLUSTER FORGET messages to the cluster...  
>>> SHUTDOWN the node.  
[root@localhost redis-cluster]#   

4.2 移除从节点

删除从节点比较方便,直接使用 ./redis-trib.rb del-node 就够了。


5. 请求路由

5.1 请求重定向

在集群模式下,Redis接收任何键相关命令时首先计算键对应的槽,再根据槽找出所对应的节点,如果节点是自身,则处理键命令;否则回复MOVED重定向错误,通知客户端请求正确的节点。这个过程称为MOVED重定向。

这里写图片描述


5.2 Smart客户端

这里写图片描述


6. 故障转移

6.1 故障发现流程

(1)当一个节点在超时时间内一直PING不通节点F,它会主观下线这个节点,也就是将这个节点F标记为P-Fail,并且会在集群内传播。

(2)因为ping/pong消息的消息体会携带集群1/10的其他节点状态数据,通过Gossip消息传播,集群内节点不断收集到故障节点的下线报告。当半数以上持有槽的主节点都标记某个节点是主观下线时,触发客观下线流程。

(3)主节点向集群广播一条fail消息,通知所有的节点将故障节点标记为客观下线。这会触发故障节点的从节点的故障转移流程。

这里写图片描述

6.2 主节点故障的恢复

故障节点变为客观下线后,如果下线节点是持有槽的主节点则需要在它的从节点中选出一个替换它,从而保证集群的高可用。下线主节点的所有从节点承担故障恢复的义务,当从节点通过内部定时任务发现自身复制的主节点进入客观下线时,将会触发故障恢复流程。

选举

(1)原则是,复制偏移量越大说明从节点延迟越低,那么它应该具有更高的优先级来替换故障主节点,从而可以优先发起选举。

(2)从节点广播选举消息,每个持有槽Slot的主节点只有一张选票,一旦从节点收到某个节点的回复,就获得了一张选票,票数超过半数主节点的选票之后就可以开始替换主节点了。

之所以不让从节点自己选举是因为一个主节点的从节点的个数是不确定的,而选举需要节点个数大于3并且是奇数。

(3)替换主节点。向集群所有节点广播自己现在是主节点了。

基于FFmpeg与Nginx的大华摄像头实时视频Web接入方案 本文详细介绍了一种基于FFmpeg与Nginx的大华摄像头实时视频Web接入方案。该方案通过FFmpeg将摄像头RTSP协议流转换为浏览器友好的HLS格式,并利用Nginx进行高效分发,最终结合Video.js构建前端播放页面,实现无需插件的跨平台实时监控。方案具有免费、轻量、稳定、易于部署的特点,适合中小企业、个人开发者快速搭建内部监控或展示系统。 阅读详情

相关推荐

ROS2通过ros2_socketcan实现CAN总线高效数据过滤与多节点通信

本文详细解析了ROS2通过ros2_socketcan实现CAN总线高效数据过滤与多节点通信的技术方案。文章重点探讨了CanFilterList的工作原理、多过滤器组合使用及动态配置策略,有效解决了工业应用中CAN总线数据过载问题,显著降低了CPU负载并提升了系统实时性。

n4o5p6q7r的博客 215

redis:CLUSTER ADDSLOTS、CLUSTER DELSLOTS

语法 CLUSTER ADDSLOTS slot [slot ...] 自3.0.0起可用。 时间复杂度: O(N)其中N是散列槽参数的总数 作用 此命令对于修改节点的集群配置视图很有用。具体来说,它将一组散列槽分配给接收该命令的节点。如果命令成功,节点把指定的散列槽映射到自己,并开始广播新的配置。 但,请注意: ...

OceanStar的博客 1138

STM32F4驱动ADS1220高精度ADC:从SPI配置到数据校准的完整实战指南

本文详细介绍了如何使用STM32F4微控制器驱动ADS1220高精度ADC,涵盖从SPI接口配置、寄存器设置到数据采集与校准的全过程。通过实战代码示例和硬件设计要点,帮助开发者快速构建高精度数据采集系统,适用于工业测量和精密仪器等应用场景。

weixin_26918763的博客 224

Redis Cluster集群功能的限制

Redis集群相对单机在功能上存在一些限制,需要我们提前了解,在使用时做好规避。限制如下: key批量操作支持有限。如mset、mget,目前只支持具有相同slot值的key执行批量操作。对弈映射为不同slot值的key由于执行mget。mset等操作可能存在多个节点上,因此不被支持。...

chouhui0263的博客 1404

Google 人机验证(reCaptcha)无法显示解决方案

Google 人机验证无法显示解决方案第一步 安装插件Chrome/Edge 电脑版Firefox 电脑版第二步 配置插件原理参考文章 前言:为了防止机器人攻击,国外很多网站都使用了 Google reCaptcha 验证码。reCaptcha 对于国外用户非常的友好,但是… 对于国内用户就不怎么友好了。究其原因,则是国内网络全线屏蔽 Google 服务,导致 reCaptcha 完全加载不出来。这样,国内玩家就无法在对应的网站进行下一步操作了。本方案可以解决 reCaptcha 无法加载的问题。 适用

qq_40713201的博客 8万+

THUCNews新闻文本分类-tfidf+sklearn

本文使用的是和鲸社区现有数据集,代码也在和鲸社区公开,fork之后可以直接运行。 本文中所用的数据集清华NLP组提供的THUCNews新闻文本分类数据集的一个子集(原始的数据集大约74万篇文档,训练起来需要花较长的时间)。 本次训练使用了其中的体育, 财经, 房产, 家居, 教育, 科技, 时尚, 时政, 游戏, 娱乐10个分类,每个分类6500条,总共65000条新闻数据。项目在和鲸社区的平台上跑的,数据集直接引用了和鲸的数据集,每个分类6500条,总共65000条新闻数据。 数据集划分如下: cnews

wmq104的博客 4591

Redis三种集群模式介绍及搭建

redis集群 redis集群就是多个redis节点一起工作的模式。它没有代理节点和中心节点,各个节点平等。 redis集群提供了以下两个好处 1、将数据自动切分(split)到多个节点 2、当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。 集群中的主从复制 集群中的每个节点都有1个至N个复制品,其中一个为主节点,其余的为从节点,如果主节点下线了,集群就会把这个主节点的一个从节点设置为新的主节点,继续工作。这样集群就不会因为一个主节点的下线而无法正常工作。 注意: 1、如果

QHJJHQ的博客 2万+

python代码实现了一个基于图注意力网络(GAT)和长短期记忆网络(LSTM)的股票成交量预测模型

自定义数据集类:定义了类,继承自。该类用于生成股票数据的时间序列样本,每个样本包含一个长度为seq_length的时间序列和对应的目标成交量。数据加载器:使用DataLoader对数据集进行批量加载,设置批量大小为 64,并开启数据打乱功能。GAT - LSTM 模型:定义了GAT_LSTM类,继承自。该模型结合了 GAT 和 LSTM 两种神经网络:GAT 部分:使用GATConv处理全局图特征,捕获股票之间的相互关系。LSTM 部分:使用nn.LSTM处理时间序列数据,捕捉时间序列的动态变化。

huanghm88的专栏 425

redis对cluster槽的操作命令

展示槽位分配信息节点、范围、对应主节点、节点id、等,不同版本显示信息略有出入。提示:根据自己不同的版本使用cluster help 命令可以获得一定的帮助。示例:计算user这个key的hash值,返回对应的槽位。示例:统计hash槽7000这个槽位上有多少个key。示例:获取1 这个槽位中的数据分页展示3个。示例:将1、2、3、4、5分配给当前节点。示例:解绑1、2、3、4、5这5个槽位。示例:解绑1、2、3、4、5这5个槽位。示例:将1、2、3节点分配给当前节点。返回1 说明该槽位有1个key。

a807719447的专栏 1772

【半导体工业实战】C#.NET开发SECS/GEM协议上位机(完整可运行源码+全进制转换工具类+工业级通信封装)

在半导体这个高精尖的工业领域,SECS/GEM协议是设备通信的基石,而C#.NET凭借其稳定性、高效的字节处理能力、Windows工控机的深度适配,成为SECS上位机开发的最优选择。本文从半导体行业的专属认知出发,提供了完整的进制转换工具类、工业级的SECS通信封装、实战的报文解析与业务调用示例、半导体专属的避坑指南,所有内容均为真实项目经验的沉淀,无空洞理论、无AI冗余文字,所有源码均可直接编译运行、无缝移植到半导体项目中。半导体工控开发的核心,从来不是炫技,而是。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 898

js逆向第24例:FastMoss数据分析网站Fm-Sign加密字段破解

破解:FastMoss数据分析网站Fm-Sign加密字段。FastMoss主要是TikTok为主的大数据分析服务的一个网站

花臂不花Home 2153

数据结构--知识点16--搜索算法(二叉树)

文章目录一、树的概念1、特点2、树的术语3、树的种类4、树的存储与表示5、常见的树的应用场景二、二叉树1、概念2、性质 一、树的概念 树是一种抽象数据类型(ADT)或是视作这种抽象数据类型的数据结构 1、特点 每个节点有零个或多个子节点 没有父节点的节点称为根节点 每一个非根节点有且只有一个父节点 除了根节点外,每个子节点可以分为**多个不相交(因为都只有一个父节点)**的子树 2、树的术语 节点的度:一个节点含有的子树的个数称为该节点的度 树的度:一棵树中,最大的节点的度称为树的度 叶节点或终端节点

ANingL的博客 3543

简单VASP计算INCAR设置(结构优化OPT、静态自洽SCF、能带BAND、态密度DOS)

改变 K 点、NBANDS、晶胞、ENCUT、POTCAR、自旋或 SOC 后要检查兼容性。该参数不参与物理计算,因此不会改变总能量、受力、应力或最终结构。如果研究的是金属、磁性材料、表面、二维材料、分子、缺陷、DFT+U、杂化泛函或强自旋轨道耦合体系,部分参数必须调整。适合已经用 IBRION = 2 预优化、力较小、自由度较多的结构。在 IBRION = 1、2、3 中,它只是内部缩放因子。“不能修改”不是程序禁止修改,而是修改后会改变理论模型、数值精度或能量参考,使结果不能直接比较。

weixin_51420530的博客 124

redis Cluster集群介绍

0、常见的几种模式对比 一、redis cluster 是什么 二、集群架构图 三、集群原理图 四、集群通信 1)集群发现:MEET 2)gossip协议 五、集群概念 1)多slave选举 2)slot(槽) 3)数据分片 4)请求重定向 5)数据迁移 6)故障转移 7)集群slots是否必须完整才能对外提供服务 六、集群健康检查机制 七、各语言的推荐客户端 0、常见的几种模式对比 模式 版本

不忘初心,方得始终 7678

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Redis】Redis Cluster 简单介绍

Redis Cluster 是 Redis 3.0 提供的一种分布式解决方案, 允许数据在多个节点之间分散存储, 从而实现高可用性和可扩展性。

LCN29的博客 1756

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Redis Cluster集群介绍

  Redis单机版能够起到一定的减压效果,必要情况下也需要配置Redis-Cluster。利用Redis集群,将对Redis的访问分配到各个结点,以减小单个结点的压力。Redis集群节点分为主节点和从节点,一个主节点可以有多个从节点,当主节点宕机时,从节点可以暂时作为主节点来工作。   伪集群     正常来讲,不同的Redis的节点应该分布在不同的IP的机器上,但是特殊情况下,比如自己...

Coder Yasmine 2371

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

redis cluster节点挂掉后_Redis集群的介绍

Redis 集群介绍Redis3.0 版本之后支持 Cluster。集群要求集群节点中必须要支持主备模式,也就说集中的主节点(Master)至少要有一个从节点(Slave)每一个蓝色的圈都代表着一个 redis 集群中的主节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作1.1Redis-Cluster 架构图red...

weixin_39852688的博客 4986

redis-cluster 集群原理介绍

参考文章:http://shift-alt-ctrl.iteye.com/blog/2285470 redis-cluster 集群发展史 3.0版本之前的redis是不支持集群的,那个时候,我们的redis如果想要集群的话,就需要一个中间件,然后这个中间件负责将我们需要存入redis中的数据的key通过一套算法计算得出一个值。然后根据这个值找到对应的redis节点,将这些数据存在这个redis的...

点缀星空 614

【Redis】高可用Redis:Redis Cluster详细介绍

Redis Cluster redis最开始使用主从模式做集群,若master宕机需要手动配置slave转为master; 后来为了高可用提出来哨兵模式,该模式下有一个哨兵监视master和slave,若master宕机可自动将slave转为master,但它也有一个问题,就是不能动态扩充;所以在3.x提出cluster集群模式。 1 为什么要实现Redis Cluster? 主从复制不能实现高可用 主从复制中单机的QPS无法满足业务希求 数据量的考虑,现有服务器内存不能满足业务数据的需要时,单纯向服务器

your_棒棒糖的博客 594

redis cluster介绍

redis从3.0开始支持集群功能。redis集群采用无中心节点方式实现,无需proxy代理,客户端直接与redis集群的每个节点连接,根据同样的hash算法计算出key对应的slot,然后直接在slot对应的redisj节点上执行命令。在redis看来,响应时间是最苛刻的条件,增加一层带来的开销是redis不能接受的。因此,redis实现了客户端对节点的直接访问,为了去中心化,节点之间通过gos...

赶路人儿 2万+

Redis Cluster 集群的介绍

Redis,作为一款开源的、内存中的数据结构存储系统,以其出色的性能和丰富的数据结构在业界赢得了广泛的认可。然而,当我们面临大量数据和高并发请求时,单个 Redis 实例可能无法满足我们的需求。这时,我们就需要使用到 Redis 的集群模式。通过集群模式,我们可以提高数据的可用性和可靠性,提高系统的性能和扩展性。在接下来的文章中,我将详细介绍 Redis 集群的基本概念,以及 Redis 集群的工作原理,故障转移和扩容等操作。

栗筝i的博客 3779

redis分布式方案redis cluster的介绍和实践

简要介绍 redis cluster是redis官方提供的分布式解决方案。主要作用有两点: 将数据根据分区规则分布到不同的redis节点上,降低单个redis节点的读写压力。 内置提供高可用支持,集群中的每个主节点可以设置多个从节点,主节点故障后,从节点可以自动替换继续保证redis的使用。 分布式的方案要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负...

markfengfeng的博客 1018

【Redis】——redis cluster介绍

一、前言 redis最开始使用主从模式做集群,若master宕机需要手动配置slave转为master;后来为了高可用提出来哨兵模式,该模式下有一个哨兵监视master和slave,若master宕机可自动将slave转为master,但它也有一个问题,就是不能动态扩充;所以在3.x提出cluster集群模式。 二、redis-cluster设计 Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。每个节点都负责进行数据读写操作,每个...

汤庆 2367

redis之cluster集群方式介绍

redis的三中集群方式 1.主从模式 2.哨兵模式 3.cluster集群模式 cluster集群模式 安装扩展 yum install ruby yum install rubygems 官网下载安装包 复制出来6份 3主3从的模式,分别修改修改配置 启动 启动6个实例 …/redis-server ./redis.conf 查看启动状况 ps -ef|grep redis 启动集群 ./redis-cli --cluster create 127.0.0.1:

lc1270895617的博客 252

redis-cluster介绍

redis-cluster集群 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis-cluster架构图如下: 其结构特点: 所有的redis节点彼此互联(PING-PONG机制),内部使用...

weixin_34015336的博客 111

Redis Cluster<一> 基础介绍

RedisCluster是Redis推出的官方集群解决方案 在此之前,先了解Redis的集群演变过程(不做实现,只分析) 一、主从复制 缺点:如果主Redis服务器宕机后,从服务器不能晋升为主服务器,从而导致redis服务时效 二、Redis哨兵机制 在主从复制之间引入哨兵 哨兵机制可以通过raft选举将从服务器晋升为主服务器,并通知到客户端。 缺点: Redis不好在线扩容,集群容量一旦达到上限,在线扩容就十分麻烦。 实现哨兵模式的配置繁琐 三、Redis集群(非官方) .

martin-Cao 322
上一篇: 强引用/软引用/弱引用/虚引用
下一篇: MySQL的跨库join
奋起直追CDS
博客等级 码龄11年 57粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值