redis怎么实现分布式-redis的虚拟槽分区(4-1-53)

更新时间:2024-08-22 分类:Redis 浏览量:2

Redis本文目录一览:

  • 1、玩转Redis的高可用(主从、哨兵、集群)
  • 2、Redis-Cluster集群
  • 3、什么是redis集群
  • 4、Hash分区
  • 5、redis集群的插槽问什么是16384个
  • 6、redis集群不支持的命令

玩转Redis的高可用(主从、哨兵、集群)

基于以上,Redis集群方案显得尤为重要。通常有3个途径:官方Redis Cluster;通过Proxy分片;客户端分片(Smart Client)。以上三种方案各有利弊。

主从复制可以提高Redis集群的可用性,当主节点出现故障时,从节点可以自动或者手动替代主节点的职责,从而保证Redis集群的高可用性。

哨兵集群,基于主从复制模式,所有的主从配置优点,它全有。主从可以切换,故障可以转移,系统的可用性就会更好。哨兵模式就是主从模式的升级,手动到自动,更加健壮。集群容量一旦到达上限,在线扩容十分麻烦。

主节点会定期将数据同步到从节点中,保证数据一致性的问题。这种集群方式在运行时存在一些问题:Redis的哨兵机制就是解决主从复制存在缺陷(选举问题),解决问题保证我们的Redis高可用,实现自动化故障发现与故障转移。

哨兵模式就是在主从模式的基础上再加一个哨兵集群。每个哨兵都会监控主节点和从节点的状态。如果主节点挂了,就会从从节点中选出一个来作为主节点,以达到高可用的目的。

原理:当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。

Redis-Cluster集群

基于以上,Redis集群方案显得尤为重要。通常有3个途径:官方Redis Cluster;通过Proxy分片;客户端分片(Smart Client)。以上三种方案各有利弊。

使用以下命令将需要关机的服务器加入集群:Copy coderedis-cluster add-node 服务器 IP:端口 其中 服务器 IP 是需要加入集群的服务器 IP 地址,端口 是该服务器的 Redis 端口号。

搭建Redis集群的过程中,执行到cluster create ip:port ... 的时候,发现程序在阻塞,显示:Waiting for the cluster to join 的字样,然后就无休无尽的等待...根据字样的提示,在等待集群的创建。

MIGRATE: MIGRATE 命令是用于将数据从一个 Redis 实例迁移到另一个 Redis 实例的命令,但是在 Redis 集群模式下不支持此命令。可以使用 --cluster 选项来进行集群迁移。

这个范围一般远远大于节点数,这是为了消除哈希的倾斜性,便于数据拆分和扩展。例如Redis Cluster槽的范围是0~16383。槽是集群内数据管理和迁移的基本单位,每个节点都会负责一定数量的槽。

什么是redis集群

Redis 集群是一个分布式(distributed)、容错(fault-tolerant)的 Redis 实现, 集群可以使用的功能是普通单机 Redis 所能使用的功能的一个子集(subset)。

Redis 集群是指将多个 Redis 节点组合在一起,以形成一个统一的、可扩展的数据存储系统。这种方法可以确保数据在整个集群中的一致性和可用性。

改用 C语言编写的 redis-cli的方式,是集群的构建方式复杂度大大降低。Redis-Cluster集群采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

redis集群:数据存放在节点内的一组或多组槽(slot)中,节点本身分为主节点和备用节点,当某个主节点挂掉时,其备用节点可被提升为主节点。

Redis哨兵适用于单节点或者主从复制的场景,可以通过哨兵节点来实现Redis的自动切换和故障恢复。Redis集群则是一种分布式的Redis解决方案,可以将数据分散到多个节点上,提高数据存储和读取的性能。

Redis Cluster是Redis 0以后才正式推出,时间较晚,目前能证明在大规模生产环境下成功的案例还不是很多,需要时间检验。Redis Sharding集群 Redis 3正式推出了官方集群技术,解决了多Redis实例协同服务问题。

Hash分区

1、常见的哈希分区规则有:节点取余分区、一致性哈希分区和虚拟槽分区。

2、HASH分区策略是根据用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。

3、常规HASH和线性HASH的增加收缩分区的原理是一样的。增加和收缩分区后原来的数据会根据现有的分区数量重新分布。

4、范围分区就是将数据表内的记录按照某个属性的取值范围进行分区。

redis集群的插槽问什么是16384个

1、普通心跳数据包携带节点的完整配置,该配置可以用旧配置以幂等方式替换,以便更新旧配置。这意味着它们包含原始形式的节点的槽配置,16k的槽配置需要使用2k内存空间,但是使用65k槽将使用8k的内存空间。

2、那么,对于节点数在1000以内的redis cluster集群,16384个槽位够用了。没有必要拓展到65536个。

3、redis集群共有2^14次方16384个hash槽,当操作数据时,使用CRC16算法计算key的hash值,然后与16384取模从而确定该数据是属于哪一个slot槽的。

4、redis-cluster集群将键存储空间分割为16384个槽位(slot),事实上集群最大节点数量是16384个【官方建议最大节点数量不超过1000个节点】。

redis集群不支持的命令

不支持的方法:KEYS,MIGRATE,SCAN等 支持但需特殊处理的方法:MSET,SINTERSTORE,SUNIONSTORE,ZINTERSTORE,ZUNIONSTORE等 全部请查看 Redis命令列表 .对于不支持的方法,在使用时需要寻找替代方案。

需要使用trib的fix命令进行修复。如果修复还是不行的话,可以清除节点数据再重新建集群,前提要备份之后操作。

Redis不是比较成熟的Memcache或者Mysql的替代品,是对于大型互联网类应用在架构上很好的补充。现在有越来越多的应用也在纷纷基于Redis做架构的改造。

路由查询集群模式,将请求发送到任意分片,接收到请求的分片会将查询请求发送到正确的分片上执行,Redis-cluster使用该模式,很遗憾,0 仅支持相同slot,key不能保证在相同slot还是没用。

不支持时重试另一台。dubbo设置了集群策略,ailover,只写入和读取任意一台,失败时重试另一台,需要服务器端自行配置数据同步。

建立一个控制台应用程序,并引用以下ServiceStack.Redis相关的四个类库。或者通过Nuget进行安装Redis常用组件ServiceStack.Redis。 下载示例代码。