一文带你彻底吃透Redis Cluster集群,干货满满,速来

浅析Redis集群数据倾斜问题及解决方法 在redis集群模式下,数据会按照一定的分布规则分散到不同的实例上。如果由于业务数据特殊性,按照指定的分布规则,可能导致不同的实例上数据分布不均匀,如以下场景:有些切片实例上数据分布量较大,有些实例上数据分布量较少;有些实例上保存了热点数据,数据访问量较大,有些实例上保存数据相对较"冷",几乎没有访问量。那么存储数据量大的实例,或者保存热点数据的实例,资源利用率会比较高,负载压力较大,导致其对数据请求响应变慢。此时就产生了数据倾斜。 阅读详情

1.为什么要实现Redis Cluster

  1. 主从复制不能实现高可用
  2. 随着公司发展,用户数量增多,并发越来越多,业务需要更高的QPS,而主从复制中单机的QPS可能无法满足业务需求
  3. 数据量的考虑,现有服务器内存不能满足业务数据的需要时,单纯向服务器添加内存不能达到要求,此时需要考虑分布式需求,把数据分布到不同服务器上
  4. 网络流量需求:业务的流量已经超过服务器的网卡的上限值,可以考虑使用分布式来进行分流
  5. 离线计算,需要中间环节缓冲等别的需求

2.数据分布

2.1 为什么要做数据分布

全量数据,单机Redis节点无法满足要求,按照分区规则把数据分到若干个子集当中

一文彻底吃透Redis Cluster集群,干货满满,速来

 

2.2 常用数据分布方式之顺序分布

比如:1到100个数字,要保存在3个节点上,按照顺序分区,把数据平均分配三个节点上
1号到33号数据保存到节点1上,34号到66号数据保存到节点2上,67号到100号数据保存到节点3上

一文彻底吃透Redis Cluster集群,干货满满,速来

 

顺序分区常用在关系型数据库的设计

2.3 常用数据分布方式之哈希分布

例如1到100个数字,对每个数字进行哈希运算,然后对每个数的哈希结果除以节点数进行取余,余数为1则保存在第1个节点上,余数为2则保存在第2个节点上,余数为0则保存在第3个节点,这样可以保证数据被打散,同时保证数据分布的比较均匀。

一文彻底吃透Redis Cluster集群,干货满满,速来

 

哈希分布方式分为三个分区方式:

2.3.1 节点取余分区

比如有100个数据,对每个数据进行hash运算之后,与节点数进行取余运算,根据余数不同保存在不同的节点上

一文彻底吃透Redis Cluster集群,干货满满,速来

节点取余方式是非常简单的一种分区方式

节点取余分区方式有一个问题:即当增加或减少节点时,原来节点中的80%的数据会进行迁移操作,对所有数据重新进行分布

节点取余分区方式建议使用多倍扩容的方式,例如以前用3个节点保存数据,扩容为比以前多一倍的节点即6个节点来保存数据,这样只需要适移50%的数据。数据迁移之后,第一次无法从缓存中读取数据,必须先从数据库中读取数据,然后回写到缓存中,然后才能从缓存中读取迁移之后的数据

一文彻底吃透Redis Cluster集群,干货满满,速来

 

节点取余方式优点:

1.主从复制不能实现高可用
2.随着公司发展,用户数量增多,并发越来越多,业务需要更高的QPS,而主从复制中单机的QPS可能无法满足业务需求
3.数据量的考虑,现有服务器内存不能满足业务数据的需要时,单纯向服务器添加内存不能达到要求,此时需要考虑分布式需求,把数据分布到不同服务器上
4.网络流量需求:业务的流量已经超过服务器的网卡的上限值,可以考虑使用分布式来进行分流
5.离线计算,需要中间环节缓冲等别的需求

节点取余方式缺点:

数据节点伸缩时,导致数据迁移
迁移数量和添加节点数据有关,建议翻倍扩容

2.3.2 一致性哈希分区

一致性哈希原理:

将所有的数据当做一个token环,token环中的数据范围是0到2的32次方。然后为每一个数据节点分配一个token范围值,这个节点就负责保存这个范围内的数据。

一文彻底吃透Redis Cluster集群,干货满满,速来

 

对每一个key进行hash运算,被哈希后的结果在哪个token的范围内,则按顺时针去找最近的节点,这个key将会被保存在这个节点上。

一文彻底吃透Redis Cluster集群,干货满满,速来

 

一文彻底吃透Redis Cluster集群,干货满满,速来

 

在上面的图中,有4个key被hash之后的值在在n1节点和n2节点之间,按照顺时针规则,这4个key都会被保存在n2节点上,如果在n1节点和n2节点之间添加n5节点,当下次有key被hash之后的值在n1节点和n5节点之间,这些key就会被保存在n5节点上面了。

在上面的例子里,添加n5节点之后,数据迁移会在n1节点和n2节点之间进行,n3节点和n4节点不受影响,数据迁移范围被缩小很多。

同理,如果有1000个节点,此时添加一个节点,受影响的节点范围最多只有千分之2。

一致性哈希一般用在节点比较多的时候。

一致性哈希分区优点:

采用客户端分片方式:哈希 + 顺时针(优化取余)
节点伸缩时,只影响邻近节点,但是还是有数据迁移

一致性哈希分区缺点:

翻倍伸缩,保证最小迁移数据和负载均衡

2.3.3 虚拟槽分区

虚拟槽分区是Redis Cluster采用的分区方式

预设虚拟槽,每个槽就相当于一个数字,有一定范围。每个槽映射一个数据子集,一般比节点数大

Redis Cluster中预设虚拟槽的范围为0到16383

一文彻底吃透Redis Cluster集群,干货满满,速来

 

步骤:

  1. 把16384槽按照节点数量进行平均分配,由节点进行管理
  2. 对每个key按照CRC16规则进行hash运算
  3. 把hash结果对16383进行取余
  4. 把余数发送给Redis节点
  5. 节点接收到数据,验证是否在自己管理的槽编号的范围,如果在自己管理的槽编号范围内,则把数据保存到数据槽中,然后返回执行结果,如果在自己管理的槽编号范围外,则会把数据发送给正确的节点,由正确的节点来把数据保存在对应的槽中。

需要注意的是:Redis Cluster的节点之间会共享消息,每个节点都会知道是哪个节点负责哪个范围内的数据槽

虚拟槽分布方式中,由于每个节点管理一部分数据槽,数据保存到数据槽中。当节点扩容或者缩容时,对数据槽进行重新分配迁移即可,数据不会丢失。
虚拟槽分区特点:

使用服务端管理节点,槽,数据:例如Redis Cluster

可以对数据打散,又可以保证数据分布均匀

2.3 顺序分布与哈希分布的对比

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.Redis Cluster基本架构

3.1 节点

Redis Cluster是分布式架构:即Redis Cluster中有多个节点,每个节点都负责进行数据读写操作

每个节点之间会进行通信。

3.2 meet操作

节点之间会相互通信

meet操作是节点之间完成相互通信的基础,meet操作有一定的频率和规则

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.3 分配槽

把16384个槽平均分配给节点进行管理,每个节点只能对自己负责的槽进行读写操作

由于每个节点之间都彼此通信,每个节点都知道另外节点负责管理的槽范围

一文彻底吃透Redis Cluster集群,干货满满,速来

 

客户端访问任意节点时,对数据key按照CRC16规则进行hash运算,然后对运算结果对16383进行取作,如果余数在当前访问的节点管理的槽范围内,则直接返回对应的数据
如果不在当前节点负责管理的槽范围内,则会告诉客户端去哪个节点获取数据,由客户端去正确的节点获取数据

一文彻底吃透Redis Cluster集群,干货满满,速来

 

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.4 复制

保证高可用,每个主节点都有一个从节点,当主节点故障,Cluster会按照规则实现主备的高可用性

对于节点来说,有一个配置项:cluster-enabled,即是否以集群模式启动

3.5 客户端路由

3.5.1 moved重定向

  1. 每个节点通过通信都会共享Redis Cluster中槽和集群中对应节点的关系
  2. 客户端向Redis Cluster的任意节点发送命令,接收命令的节点会根据CRC16规则进行hash运算与16383取余,计算自己的槽和对应节点
  3. 如果保存数据的槽被分配给当前节点,则去槽中执行命令,并把命令执行结果返回给客户端
  4. 如果保存数据的槽不在当前节点的管理范围内,则向客户端返回moved重定向异常
  5. 客户端接收到节点返回的结果,如果是moved异常,则从moved异常中获取目标节点的信息
  6. 客户端向目标节点发送命令,获取命令执行结果

一文彻底吃透Redis Cluster集群,干货满满,速来

 

需要注意的是:客户端不会自动找到目标节点执行命令

槽命中:直接返回

一文彻底吃透Redis Cluster集群,干货满满,速来

 

[root@mysql ~]# redis-cli -p 9002 cluster keyslot hello
(integer) 866

槽不命中:moved异常

[root@mysql ~]# redis-cli -p 9002 cluster keyslot php
(integer) 9244

一文彻底吃透Redis Cluster集群,干货满满,速来

 

[root@mysql ~]# redis-cli -c -p 9002
127.0.0.1:9002> cluster keyslot hello
(integer) 866
127.0.0.1:9002> set hello world
-> Redirected to slot [866] located at 192.168.81.100:9003
OK
192.168.81.100:9003> cluster keyslot python
(integer) 7252
192.168.81.100:9003> set python best
-> Redirected to slot [7252] located at 192.168.81.101:9002
OK
192.168.81.101:9002> get python
"best"
192.168.81.101:9002> get hello
-> Redirected to slot [866] located at 192.168.81.100:9003
"world"
192.168.81.100:9003> exit
[root@mysql ~]# redis-cli -p 9002
127.0.0.1:9002> cluster keyslot python
(integer) 7252
127.0.0.1:9002> set python best
OK
127.0.0.1:9002> set hello world
(error) MOVED 866 192.168.81.100:9003
127.0.0.1:9002> exit
[root@mysql ~]# 

3.5.2 ask重定向

一文彻底吃透Redis Cluster集群,干货满满,速来

 

在对集群进行扩容和缩容时,需要对槽及槽中数据进行迁移

当客户端向某个节点发送命令,节点向客户端返回moved异常,告诉客户端数据对应的槽的节点信息

如果此时正在进行集群扩展或者缩空操作,当客户端向正确的节点发送命令时,槽及槽中数据已经被迁移到别的节点了,就会返回ask,这就是ask重定向机制

一文彻底吃透Redis Cluster集群,干货满满,速来

步骤:

  1. 客户端向目标节点发送命令,目标节点中的槽已经迁移支别的节点上了,此时目标节点会返回ask转向给客户端
  2. 客户端向新的节点发送Asking命令给新的节点,然后再次向新节点发送命令
  3. 新节点执行命令,把命令执行结果返回给客户端

moved异常与ask异常的相同点和不同点

两者都是客户端重定向

moved异常:槽已经确定迁移,即槽已经不在当前节点

ask异常:槽还在迁移中

3.5.3 smart智能客户端

使用智能客户端的首要目标:追求性能

从集群中选一个可运行节点,使用Cluster slots初始化槽和节点映射

将Cluster slots的结果映射在本地,为每个节点创建JedisPool,相当于为每个redis节点都设置一个JedisPool,然后就可以进行数据读写操作

读写数据时的注意事项:

每个JedisPool中缓存了slot和节点node的关系
key和slot的关系:对key进行CRC16规则进行hash后与16383取余得到的结果就是槽
JedisCluster启动时,已经知道key,slot和node之间的关系,可以找到目标节点
JedisCluster对目标节点发送命令,目标节点直接响应给JedisCluster
如果JedisCluster与目标节点连接出错,则JedisCluster会知道连接的节点是一个错误的节点
此时JedisCluster会随机节点发送命令,随机节点返回moved异常给JedisCluster
JedisCluster会重新初始化slot与node节点的缓存关系,然后向新的目标节点发送命令,目标命令执行命令并向JedisCluster响应
如果命令发送次数超过5次,则抛出异常"Too many cluster redirection!"
        

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.6 多节点命令实现

Redis Cluster不支持使用scan命令扫描所有节点
多节点命令就是在在所有节点上都执行一条命令
批量操作优化

3.6.1 串行mget

定义for循环,遍历所有的key,分别去所有的Redis节点中获取值并进行汇总,简单,但是效率不高,需要n次网络时间

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.6.2 串行IO

对串行mget进行优化,在客户端本地做内聚,对每个key进行CRC16hash,然后与16383取余,就可以知道哪个key对应的是哪个槽

本地已经缓存了槽与节点的对应关系,然后对key按节点进行分组,成立子集,然后使用pipeline把命令发送到对应的node,需要nodes次网络时间,大大减少了网络时间开销

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.6.3 并行IO

并行IO是对串行IO的一个优化,把key分组之后,根据节点数量启动对应的线程数,根据多线程模式并行向node节点请求数据,只需要1次网络时间

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.6.4 hash_tag

将key进行hash_tag的包装,然后把tag用大括号括起来,保证所有的key只向一个node请求数据,这样执行类似mget命令只需要去一个节点获取数据即可,效率更高

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.6.5 四种优化方案优缺点分析

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.7 故障发现

Redis Cluster通过ping/pong消息实现故障发现:不需要sentinel

ping/pong不仅能传递节点与槽的对应消息,也能传递其他状态,比如:节点主从状态,节点故障等

故障发现就是通过这种模式来实现,分为主观下线和客观下线

3.7.1 主观下线

某个节点认为另一个节点不可用,'偏见',只代表一个节点对另一个节点的判断,不代表所有节点的认知

主观下线流程:

  1. 节点1定期发送ping消息给节点2。
  2. 如果发送成功,代表节点2正常运行,节点2会响应PONG消息给节点1,节点1更新与节点2的最后通信时间。
  3. 如果发送失败,则节点1与节点2之间的通信异常判断连接,在下一个定时任务周期时,仍然会与节点2发送ping消息。
  4. 如果节点1发现与节点2最后通信时间超过node-timeout,则把节点2标识为pfail状态。

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.7.2 客观下线

当半数以上持有槽的主节点都标记某节点主观下线时,可以保证判断的公平性

集群模式下,只有主节点(master)才有读写权限和集群槽的维护权限,从节点(slave)只有复制的权限

客观下线流程:

1.某个节点接收到其他节点发送的ping消息,如果接收到的ping消息中包含了其他pfail节点,这个节点会将主观下线的消息内容添加到自身的故障列表中,故障列表中包含了当前节点接收到的每一个节点对其他节点的状态信息

2.当前节点把主观下线的消息内容添加到自身的故障列表之后,会尝试对故障节点进行客观下线操作

故障列表的周期为:集群的node-timeout * 2,保证以前的故障消息不会对周期内的故障消息造成影响,保证客观下线的公平性和有效性

一文彻底吃透Redis Cluster集群,干货满满,速来

 

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.8 故障恢复

3.8.1 资格检查

  1. 对从节点的资格进行检查,只有难过检查的从节点才可以开始进行故障恢复
  2. 每个从节点检查与故障主节点的断线时间
  3. 超过cluster-node-timeout * cluster-slave-validity-factor数字,则取消资格
  4. cluster-node-timeout默认为15秒,cluster-slave-validity-factor默认值为10
  5. 如果这两个参数都使用默认值,则每个节点都检查与故障主节点的断线时间,如果超过150秒,则这个节点就没有成为替换主节点的可能性

3.9.2 准备选举时间

使偏移量最大的从节点具备优先级成为主节点的条件

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.8.3 选举投票

对选举出来的多个从节点进行投票,选出新的主节点

一文彻底吃透Redis Cluster集群,干货满满,速来

 

3.8.4 替换主节点

当前从节点取消复制变成离节点(slaveof no one)
执行cluster del slot撤销故障主节点负责的槽,并执行cluster add slot把这些槽分配给自己
向集群广播自己的pong消息,表明已经替换了故障从节点

3.8.5 故障转移演练

对某一个主节点执行kill -9 {pid}来模拟宕机的情况

3.9 Redis Cluster的缺点

当节点数量很多时,性能不会很高

解决方式:使用智能客户端。智能客户端知道由哪个节点负责管理哪个槽,而且当节点与槽的映射关系发生改变时,客户端也会知道这个改变,这是一种非常高效的方当节点数量很多时,性能不会很高解决方式:使用智能客户端。智能客户端知道由哪个节点负责管理哪个槽,而且当节点与槽的映射关系发生改变时,客户端也会知道这个改变,这是一种非常高效的方式

4.搭建Redis Cluster

搭建Redis Cluster有两种安装方式

  • 1.原生命令安装
  • 2.官方工具安装5.开发运维常见的问题5.1 集群完整性

cluster-require-full-coverage默认为yes,即是否集群中的所有节点都是在线状态且16384个槽都处于服务状态时,集群才会提供服务

集群中16384个槽全部处于服务状态,保证集群完整性

当某个节点故障或者正在故障转移时获取数据会提示:(error)CLUSTERDOWN The cluster is down

建议把cluster-require-full-coverage设置为no

5.2 带宽消耗

Redis Cluster节点之间会定期交换Gossip消息,以及做一些心跳检测

官方建议Redis Cluster节点数量不要超过1000个,当集群中节点数量过多时,会产生不容忽视的带宽消耗

消息发送频率:节点发现与其他节点最后通信时间超过cluster-node-timeout /2时,会直接发送PING消息

消息数据量:slots槽数组(2kb空间)和整个集群1/10的状态数据(10个节点状态数据约为1kb)

节点部署的机器规模:集群分布的机器越多且每台机器划分的节点数越均匀,则集群内整体的可用带宽越高

带宽优化:

避免使用'大'集群:避免多业务使用一个集群,大业务可以多集群
cluster-node-timeout:带宽和故障转移速度的均衡
尽量均匀分配到多机器上:保证高可用和带宽

5.3 Pub/Sub广播

在任意一个cluster节点执行publish,则发布的消息会在集群中传播,集群中的其他节点都会订阅到消息,这样节点的带宽的开销会很大

publish在集群每个节点广播,加重带宽

解决办法:需要使用Pub/Sub时,为了保证高可用,可以单独开启一套Redis Sentinel

5.4 集群倾斜

对于分布式数据库来说,存在倾斜问题是比较常见的

集群倾斜也就是各个节点使用的内存不一致

5.4.1 数据倾斜原因

1.节点和槽分配不均,如果使用redis-trib.rb工具构建集群,则出现这种情况的机会不多

redis-trib.rb info ip:port查看节点,槽,键值分布
redis-trib.rb rebalance ip:port进行均衡(谨慎使用)

2.不同槽对应键值数量差异比较大

CRC16算法正常情况下比较均匀
可能存在hash_tag
cluster countkeysinslot {slot}获取槽对应键值个数

3.包含bigkey:例如大字符串,几百万的元素的hash,set等

在从节点:redis-cli --bigkeys
优化:优化数据结构

4.内存相关配置不一致

hash-max-ziplist-value:满足一定条件情况下,hash可以使用ziplist
set-max-intset-entries:满足一定条件情况下,set可以使用intset
在一个集群内有若干个节点,当其中一些节点配置上面两项优化,另外一部分节点没有配置上面两项优化
当集群中保存hash或者set时,就会造成节点数据不均匀
优化:定期检查配置一致性

5.请求倾斜:热点key

重要的key或者bigkey
Redis Cluster某个节点有一个非常重要的key,就会存在热点问题

5.4.2 集群倾斜优化:

避免bigkey
热键不要用hash_tag
当一致性不高时,可以用本地缓存+ MQ(消息队列)

5.5 集群读写分离

只读连接:集群模式下,从节点不接受任何读写请求

当向从节点执行读请求时,重定向到负责槽的主节点

readonly命令可以读:连接级别命令,当连接断开之后,需要再次执行readonly命令

读写分离:

同样的问题:复制延迟,读取过期数据,从节点故障
修改客户端:cluster slaves {nodeId}

5.6 数据迁移

官方迁移工具:redis-trib.rb和import

只能从单机迁移到集群

不支持在线迁移:source需要停写

不支持断点续传

单线程迁移:影响深度

在线迁移:

唯品会:redis-migrate-tool
豌豆荚:redis-port

5.7 集群VS单机

集群的限制:

key批量操作支持有限:例如mget,mset必须在一个slot
key事务和Lua支持有限:操作的key必须在一个节点
key是数据分区的最小粒度:不支持bigkey分区
不支持多个数据库:集群模式下只有一个db0
复制只支持一层:不支持树形复制结构
Redis Cluster满足容量和性能的扩展性,很多业务'不需要'
大多数时客户端性能会'降低'
命令无法跨节点使用:mget,keys,scan,flush,sinter等
Lua和事务无法跨节点使用
客户端维护更复杂:SDK和应用本身消耗(例如更多的连接池)

很多场景Redis Sentinel已经够用了

6.Redis Cluster总结:

1.Redis Cluster数据分区规则采用虚拟槽方式(16384个槽),每个节点负责一部分槽和相关数据,实现数据和请求的负载均衡
2.搭建Redis Cluster划分四个步骤:准备节点,meet操作,分配槽,复制数据。
3.Redis官方推荐使用redis-trib.rb工具快速搭建Redis Cluster
4.集群伸缩通过在节点之间移动槽和相关数据实现

  • 扩容时根据槽迁移计划把槽从源节点迁移到新节点
  • 收缩时如果下线的节点有负责的槽需要迁移到其他节点,再通过cluster forget命令让集群内所有节点忘记被下线节点

5.使用smart客户端操作集群过到通信效率最大化,客户端内部负责计算维护键,槽以及节点的映射,用于快速定位到目标节点
6.集群自动故障转移过程分为故障发现和节点恢复。节点下线分为主观下线和客观下线,当超过半数节点认为故障节点为主观下线时,标记这个节点为客观下线状态。从节点负责对客观下线的主节点触发故障恢复流程,保证集群的可用性
7.开发运维常见问题包括:超大规模集群带席消耗

如何制作Mike21溢油模型围油栏文件 这段时间群友在做海洋环评的做了一个MIKE21的溢油模型,溢油模型其实也是ECOLAB模块的应用,而在海上发生溢油事件的时候,为防止溢油对海洋生态的破坏,经常使用的一种手段就是使用围油栏技术将溢油控制在一定范围并进行处理。今天小编就给大家说说在MIKE21里怎么实现围油栏文件的制作 阅读详情

相关推荐

RPA实战:手把手教你打造抖音自动养号机器人(含避坑指南)

本文详细介绍了如何利用RPA技术从零构建一个智能化的抖音自动养号机器人。内容涵盖环境准备、核心工具选型、拟人化行为流程设计、代码实现模块拆解,并提供了关键的避坑指南与风控对抗策略,帮助开发者高效、稳定地实现账号自动化运营。

orange的博客 561

redis之数据倾斜如何处理

我们在使用Redis分片集群时,集群最好的状态就是每个实例可以处理相同或相近比例的请求,但如果不是这样,则会出现某些实例压力特别大,而某些实例特别空闲的情况发生,本文就一起来看下这种情况是如何发生的以及如何处理。数据量倾斜:数据分布的不均匀,导致某些实例数据特别多,进而导致处理的请求量大数据访问倾斜:数据分布均匀,但是某些实例存在热点数据,进而导致处理的请求量大可以看到不管是数据量倾斜,还是数据访问倾斜,最终导致的结果都是发生倾斜的实例处理了更多的数据请求,压力增大。

wang0907的博客 1510

PADS Layout中快速导入自定义元器件封装的实用技巧

本文详细介绍了在PADS Layout中高效导入自定义元器件封装的实用技巧。针对封装“找不到”、“对不上”、“导不进”三大痛点,系统梳理了从封装文件来源识别、库规划管理,到三种核心导入场景(从库文件添加、从其他设计借用、处理第三方格式)的完整操作流程,并提供了导入后的关键验证清单与常见问题排查方法,旨在帮助硬件工程师快速掌握这一提升设计效率的关键技能。

weixin_29302047的博客 375

redis中数据倾斜问题的产生和解决方案

在服务端系统服务开发中,缓存是一种常用的技术,它可以提高系统对请求的处理效率,而redis又是缓存技术栈中的一个佼佼者,广泛的应用于各种服务系统中。在大型互联网服务中,每天需要处理的请求和存储的缓存数据都是海量的,在这些大型系统中,使用单实例的redis,很难满足系统超高的并发请求以及海量数据缓存需求。大型的互联网服务中对于redis的使用,往往采用集群架构,通过横向扩展redis实例规模的方式,以较低的成本,来提升缓存系统对数据请求的处理效率和数据存储容量。 redis集群架构虽然有众多优点,但是事物往

weixin_45701550的博客 5929

打通ZYNQ的任督二脉:AXI_FIFO数据交互全解析

FIFO(First In First Out,先进先出)是一种经典的数据缓冲结构,就像排队买票一样,先来的人先得到服务。时钟域交叉(CDC):连接不同时钟频率的模块数据缓冲:平衡生产者和消费者的速度差异流量控制:防止数据丢失或溢出input clk,// 输入AXI4-Stream接口(从PS到PL)// 输出AXI4-Stream接口(从PL到PS)// 状态指示信号// 定义状态机状态// 数据缓存// 8个深度的缓存// 流水线处理寄存器。

QQ_778132974的博客 306

【OpenClaw企业级智能体实战】第16篇:电商“龙虾”掘金记:用OpenClaw实现小红书/抖音/淘宝全自动矩阵运营(2026实测版)

2026年,OpenClaw(小龙虾)已成为电商运营的核心效率工具——从公众号文案3分钟生成到TikTok爆款视频1小时复刻,从多平台内容同步到自动比价加购,彻底重构了电商运营的工作模式。本文基于真实商业案例(元岳科技、TikTok跨境卖家、淘宝MCP工具),系统拆解电商智能体的落地路径:先详解OpenClaw在电商场景的核心原理与变现模式(代部署、模板售卖、轻定制、内容套利),再提供阿里云/本地双部署方案,完整实现小红书/抖音/淘宝的自动化运营(热点抓取、内容生成、多平台分发、数据分析)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2290

Redis数据倾斜

Redis 数据倾斜问题通常出现在分布式 Redis 环境中,尤其是 Redis 集群环境。这意味着一部分节点承载了比其他节点更多的数据或者接收的请求更多,导致负载不均衡。数据倾斜可能会对性能和可扩展性造成影响。针对Redis的数据倾斜问题,可能需要综合考虑应用逻辑、key设计、集群配置和负载均衡策略多个方面,采取一种或多种措施进行缓解。在实践中,通常需要根据具体的业务场景和倾斜状况来选择最合适的解决办法。

Mamba Out 1005

肖特基二极管选型参数,结构原理,工艺与注意问题总结

肖特基二极管(Schottky Diode)是一种特殊的二极管,也被称为肖特基势垒二极管。它是利用金属与半导体接触形成的金属-半导体结原理制成的。与传统的PN结二极管相比,肖特基二极管具有更低的正向压降、更高的开关速度、更高的反向恢复时间以及更好的温度稳定性等特点。本文对肖特基二极管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 813

Redis数据库的数据倾斜

对于集群系统,一般缓存是分布式的,即不同节点负责一定范围的缓存数据。我们把缓存数据分散度不够,导致大量的缓存数据集中到了一台或者几台服务节点上,称为数据倾斜。一般来说数据倾斜是由于负载均衡实施的效果不好引起的。

Winn~ 2022

第10集:AIOps 平台架构设计!画出面试官最想看的系统全景图

本文介绍了如何将AIOps平台的六大功能模块整合为四层架构设计,并生成专业系统全景图。文章首先指出面试中架构设计能力的重要性,强调一张清晰的架构图能直观展现全局观。随后指导读者检查项目结构,准备绘图环境。核心部分详细拆解了四层架构:数据采集层(Prometheus、ELK等)、AI分析层(巡检、告警、预测等)、决策执行层(工作流引擎、自愈Agent)和展示交互层(API、控制台)。通过Python代码自动生成模块依赖关系图,并提供了面试讲解技巧。全文旨在帮助开发者在面试中系统性地展示项目架构设计能力。

qq_2937655951的博客 93

educoder实训——计算几何形状的表面积与体积

educoder python实训

qq_41234663的博客 1230

redis 槽点重新分配 集群_一文彻底吃透Redis Cluster集群,干货满满,速来

1.为什么要实现Redis Cluster主从复制不能实现高可用 随着公司发展,用户数量增多,并发越来越多,业务需要更高的QPS,而主从复制中单机的QPS可能无法满足业务需求 数据量的考虑,现有服务器内存不能满足业务数据的需要时,单纯向服务器添加内存不能达到要求,此时需要考虑分布式需求,把数据分布到不同服务器上 网络流量需求:业务的流量已经超过服务器的网卡的上限值,可以考虑使用分布式来进行分流 离...

weixin_42463199的博客 2195

端到端自动驾驶:特斯拉FSD Beta技术拆解

端到端自动驾驶:特斯拉FSD Beta技术拆解 ,人工智能,计算机视觉,大模型,AI,这篇文章围绕特斯拉FSD Beta的端到端自动驾驶技术展开,先介绍端到端自动驾驶的定义、与传统方案的区别及FSD Beta的特点,再阐述其硬件基础、技术架构,解析关键技术,还涉及训练数据与标注、安全与冗余设计、实际应用场景与挑战以及技术迭代与更新等内容,展现了该技术的多方面情况。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

直击Redis集群痛点:数据倾斜优化实战,打造高效分布式缓存架构

随着数据规模的不断扩大,Redis分片集群在处理大规模数据时可能会面临一个棘手的问题——数据倾斜。这种现象是指数据分布不均匀,导致某些Redis实例承受了远超过其应承担的负载,从而严重影响系统的性能和稳定性。如果发生了数据倾斜,那保存了大量数据或访问量大的节点就会存在性能问题,速度变慢,影响用户体验。这是使用分片集群时应该避免的,那如何才能避免数据倾斜呢?

我是一名热爱编程和分享知识的技术作者,在金融和教育领域有多年的研发管理经验,感谢您访问我的博客,一定会为您带来不一样的收货! 1671

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Redis 数据倾斜?别慌!从成因到解决方案,一文帮你搞定

数据量倾斜数据访问倾斜数据中有bigkey,导致某个实例的数据量增加Slot手工分配不均,导致某个或某些实例上有大量数据使用了Hash Tag,导致数据集中到某些实例上。数据访问倾斜主要原因:有热点数据存在,导致大量访问请求集中到了热点数据所在的实例上。倾斜类型倾斜成因应对方法数据量倾斜存在bigkey业务层避免创建bigkey 把集合类型的bigkey拆分成多个小集合,分散保存同上Slot手工分配不均制定运维规范,避免把过多Slot分配到一个实例上同上。

jike007gt的博客 1152

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

(九)Redis集群节点超时时限(node timeout)配置cluster-node-timeout详解

参考文章:http://doc.redisfans.com/topic/cluster-spec.html 集群节点的超时时限redis.conf配置默认值是:   cluster-node-timeout 15000   一、节点失效检测 1.集群中当一个节点向另一个节点发送PING命令,但是目标节点未在给定的时限内返回PING命令的回复时,那么发送命令的节点会将目标节点标记为PF...

OceanSky的专栏 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Redis 数据分布优化:如何应对数据倾斜?

Redis 核心技术与实战 笔记作者: 蒋德钧more在切片集群中,数据会按照一定的分布规则分散到不同的实例上保存。比如,在使用 Redis Cluster 或 Codis 时,数据都会先按照 CRC 算法的计算值对 Slot(逻辑槽)取模,同时,所有的 Slot 又会由运维管理员分配到不同的实例上。这样,数据就被保存到相应的实例上了。虽然这种方法实现起来比较简单,但是很容易导致一个问题:数据倾斜。数据倾斜有两类。

勿忘初心 1811

Redis集群数据倾斜问题

在集群模式下,数据被分割成多个部分(slot槽),分布在多个Redis节点上。集群中的节点分为主节点和从节点,主节点负责读写请求和集群信息的维护,从节点只进行主节点数据和状态信息的复制。Redis集群有16384个哈希槽,集群的每个节点负责一部分的哈希槽,每个key通过CRC16校验后对16384取余来决定放置哪个哈希槽。

hong4760的专栏 907

如何解决 Redis 数据倾斜、热点等问题

Redis 集群 总共有4台机器,假设数据分布均衡,每台机器承担 四分之一的流量,如果某一台机器突然挂了,顺时针方向下一台机器将要承担这多出来的 四分之一 流量,最终要承担 二分之一 的流量,还是有点恐怖。由于业务数据特殊性,按照指定的分片规则,可能导致不同的实例上数据分布不均匀,大量的数据集中到了一台或者几台机器节点上计算,从而导致这些节点负载多大,而其他节点处于空闲等待中,导致最终整体效率低下。如果集群的机器不多,且平时单机的负载水位很高,某个节点宕机带来的压力很容易引发雪崩效应。

mxt51220的博客 1669

了解Redis数据倾斜

缓存倾斜

Younger 892

Redis 数据倾斜问题详解

Redis数据倾斜是指在分布式集群中数据存储或访问请求分布不均的现象,分为存储倾斜(大Key、槽位不均)和请求倾斜(热点Key)。诊断方法包括监控指标、分析节点内存和Key分布。解决方案:对大Key进行拆分和优化数据结构,对热点Key采用本地缓存、读写分离或分片策略,同时规范HashTag使用并调整槽位分布。预防措施包括容量规划、数据预热和客户端优化。通过系统性监控和针对性优化可有效缓解倾斜问题,保障Redis集群性能稳定。

萧曳丶 808

Redis集群与分片问题——数据倾斜问题及解决方案

Redis集群与分片问题——数据倾斜问题及解决方案

专注分享技术、实用优质教程、资源 1476

Redis 切片集群的数据倾斜分析

Redis 中如何应对数据倾斜 什么是数据倾斜 如果 Redis 中的部署,采用的是切片集群,数据是会按照一定的规则分散到不同的实例中保存,比如,使用Redis Cluster或Codis。v

java_beautiful的博客 595

Redis数据倾斜问题解决

Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。

刘皇叔说Java的博客 825

【Redis】Redis分布式集群倾斜

0、背景 对于分布式系统而言,整个集群处理请求的效率和存储容量,往往取决于集群中响应最慢或存储增长最快的节点。所以在系统设计和容量规划时,我们尽量保障集群中各节点的“数据和请求分布均衡“。但在实际生产系统中,出现数据容量和请求倾斜(类似Data Skew)问题是比较常见的。 示例:春节抽奖服务,业务评估峰值qps是2w,转化到redis集群为10w qps和5GB内存存储,部署5个分片每个分片1GB+2W qps的redis集群(包含预留容量)。结果活动开始时,才发现服务存在”热点key",请求严重倾斜

Sunny的专栏 611
上一篇: 不喜勿喷!MySQL调优实战经验总结,扫平你的数据库开发障碍
下一篇: 来自五年架构师的职业感悟,送给处于工作学习迷茫期的你
Java领域指导者
博客等级 码龄7年 404粉丝 265原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值