我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Redis集群有哪些功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Redis集群有哪些功能

本篇内容介绍了“Redis集群有哪些功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  什么是Redis集群

  Redis集群是一个实现分布式并且允许单点故障的Redis高级版本。

  Redis集群没有最重要或者说中心节点,这个版本最主要的一个目标是设计一个线性可伸缩(可随意增删节点?)的功能。

  Redis集群为了数据的一致性可能牺牲部分允许单点故障的功能,所以当网络故障和节点发生故障时这个系统会尽力去保证数据的一致性和有效性。(这里我们认为节点故障是网络故障的一种特殊情况)

  为了解决单点故障的问题,我们同时需要masters 和 slaves。 即使主节点(master)和从节点(slave)在功能上是一致的,甚至说他们部署在同一台服务器上,从节点也仅用以替代故障的主节点。 实际上应该说 如果对从节点没有read-after-write(写并立即读取数据 以免在数据同步过程中无法获取数据)的需求,那么从节点仅接受只读操作。

  已实现子集

  Redis集群会把所有的单一key存储在非分布式版本的Redis中。对于复合操作比如求并集求交集之类则未实现。

  在将来,有可能会增加一种为“Computation Node”的新类型节点。这种节点主要用来处理在集群中multi-key的只读操作,但是对于multi-key的只读操作不会以集群传输到Computation Node节点再进行计算的方式实现。

  Redis集群版本将不再像独立版本一样支持多数据库,在集群版本中只有database 0,并且SELECT命令是不可用的。

  客户端与服务端在Redis集群版中的约定

  在Redis集群版本中,节点有责任/义务保存数据和自身状态,这其中包括把数据(key)映射到正确的节点。所有节点都应该自动探测集群中的其他节点,并且在发现故障节点之后把故障节点的从节点更改为主节点(原文这里有“如果有需要” 可能是指需要设置或者说存在从节点)。

  集群节点使用TCP bus和二进制协议进行互联并对任务进行分派。各节点使用gossip 协议发送ping packets给集群其他节点以确定其他节点是否正常工作。cluster bus也可以用来在节点间执行PUB/SUB命令。

  当发现集群节点无应答的时候则会使用redirections errors -MOVED and -ASK命令并且会重定向至可用节点。理论上客户端可随意向集群中任意节点发送请求并获得重定向,也就是说客户端实际上并不用关心集群的状态。然而,客户端也可以缓存数据对应的节点这样可以免去服务端进行重定向的工作,这在一定程度上可以提高效率。

  Redis集群有哪些功能

  Keys分配模式

  一个集群可以包含最多4096个节点(但是我们建议最多设置几百个节点)。

  所有的主节点会控制4096个key空间的百分比。当集群稳定之后,也就是说不会再更改集群配置(更改配置指的增删节点),那么一个节点将只为一个hash slot服务。(但是服务节点(主节点)可以拥有多个从节点用来防止单点故障)

  用来计算key属于哪个hash slot的算法如下:

  HASH_SLOT = CRC16(key) mod 4096

  Name: XMODEM (also known as ZMODEM or CRC-16/ACORN)

  Width: 16 bit

  Poly: 1021 (That is actually x^16 + x^12 + x^5 + 1)

  Initialization: 0000

  Reflect Input byte: False

  Reflect Output CRC: False

  Xor constant to output CRC: 0000

  Output for "123456789": 31C3

  这里我们会取CRC16后的12个字节。在我们的测试中,对于4096个slots, CRC16算法最合适。

  集群节点特性

  在集群中每个节点都拥有唯一的名字。节点名为16进制的160 bit随机数,当节点获取到名字后将被立即启用。节点名将被永久保存到节点设置文件中,除非系统管理员手动删除节点配置文件。

  节点名是集群中每个节点的身份证明。在不更改节点ID的情况下是允许修改节点IP和地址的。cluster bus会自动通过gossip协议获取更改后的节点设置。

  每个节点可获知其他节点的信息包括:IP 端口、状态、管理的hash slots、cluster bus最后发送PING的时间、最后接收到PONG的时间、从节点数量、节点ID。

  无论是主节点还是从节点都可以通过CLUSTER NODES命令来获取以上信息

  示例如下:

  $ redis-cli cluster nodes

  d1861060fe6a534d42d8a19aeb36600e18785e04 :0 myself - 0 1318428930 connected 0-1364

  3886e65cc906bfd9b1f7e7bde468726a052d1dae 127.0.0.1:6380 master - 1318428930 1318428931 connected 1365-2729

  d289c575dcbc4bdd2931585fd4339089e461a27d 127.0.0.1:6381 master - 1318428931 1318428931 connected 2730-4095

  节点交互

  所有节点总是允许接受来自cluster bus的连接请求,并且即使请求PING的节点是不可信的也会进行应答。然而,所有来自非集群节点的packets都会被忽略。

  只有以下两种情况节点才会把其他节点认为是集群的一部分:

  如果一个节点使用 MEET message 介绍自己。MEET message 命令是强制其他节点把自己当成是集群的一部分。只有系统管理员使用 CLUSTER MEET ip port 命令节点才会发送MEET message给其他节点。

  另外一种方式就是通过集群节点间的推荐机制。例如 如果A节点知道B节点属于集群,而B知道C节点属于集群,那么B将会发送gossip信息告知A:C是属于集群的。当A获得gossip信息之后就会尝试去连接C。

  这意味着,当我们以任意连接方式为集群加入一个节点,集群中所有节点都会自动对新节点建立信任连接。也就是说,集群具备自动识别所有节点的功能,但是这仅发生在当系统管理强制为新节点与集群中任意节点建立信任连接的前提下。

  这个机制使得集群系统更加健壮。

  当一个节点故障时,其余节点会尝试连接其他所有已知的节点已确定其他节点的健壮性。

  被移动数据的重定向

  Redis客户端被允许向集群中的任意节点发送命令,其中包括从节点。被访问的节点将会分析命令中所需要的数据(这里仅指请求单个key),并自己通过判断hash slot确定数据存储于哪个节点。

  如果被请求节点拥有hash slot数据(这里指请求数据未被迁移过 或者 hash slot在数据迁移后被重新计算过),则会直接返回结果,否则将会返回一个 MOVED 错误。

  MOVED 错误如下:

  GET x

  -MOVED 3999 127.0.0.1:6381

  这个错误包括请求的数据所处的 hash slot(3999) 和 数据目前所属的IP:端口。客户端需要通过访问返回的IP:端口获取数据。即使在客户端请求并等待数据返回的过程中,集群配置已被更改(也就是说请求的key在配置文件中所属的节点ID已被重定向至新的IP:端口),目标节点依然会返回一个MOVED错误。

  所以虽然在集群中的节点使用节点ID来确定身份,但是map依然是靠hash slot和Redis节点的IP:端口来进行配对。

  客户端虽然不被要求但是应该尝试去记住hash slot 3999现在已被转移至127.0.0.1:6381。这样的话,当一个新的命令需要从hash slot 3999获取数据时就可以有更高的几率从hash slot获取到正确的目标节点。

  假设集群已经足够的稳定(不增删节点),那么所有的客户端将会拥有一份hash slots对应节点的数据,这可以使整个集群更高效,因为这样每个命令都会直接定向到正确的节点,不需要通过节点寻找节点或者重新计算hash slot对应的节点。

  集群不下线更新配置

  Redis集群支持线上增删节点。实际上对于系统来说,增加和删除节点在本质上是一样的,因为他们都是把hash slot从一个节点迁移至另外一个节点而已。

  增加节点:集群中加入一个空节点并且把hash slot从已存在的节点们移至新节点。

  删除节点:集群删除一个已存在节点并且把hash slot分散到已存在的其他节点中。

  所以实现这个功能的核心就是迁移slots。实际上从某种观点上来说,hash slot只不过是一堆key的合集,所以Redis集群要做的事情只是在重分片的时候把一堆key从一个实例移动到另外一个实例。

“Redis集群有哪些功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Redis集群有哪些功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Redis集群搭建的方式有哪些

这篇文章主要介绍Redis集群搭建的方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、单节点实例单节点实例还是比较简单的,平时做个测试,写个小程序如果需要用到缓存的话,启动一个Redis 还是很轻松的,做为
2023-06-15

java连接redis集群方式有哪些

Java连接Redis集群方式直接连接:简单,但需要手动处理连接和故障转移。JedisCluster:高级抽象,提供一致性哈希和故障转移处理。LettuceCluster:针对Redis集群优化,性能和并发性更好。SpringDataRedis:Spring框架模块,提供透明的集群访问和底层连接抽象。连接池:管理连接创建和销毁,提高性能和可扩展性。选择方式取决于应用程序需求:简单场景直接连接,高可用和性能需求使用高级库,使用Spring框架用SpringDataRedis,需要连接池优势就用连接池库。
java连接redis集群方式有哪些
2024-04-12

java连接redis集群方式有哪些

Java连接Redis集群的方式有以下几种:1. 使用Jedis Cluster:Jedis是Redis官方推荐的Java客户端之一,它内置了对Redis集群的支持。可以通过创建JedisCluster对象来连接Redis集群,并使用集群的
2023-09-16

redis集群切片的方式有哪些

在Redis集群中,数据的切片方式通常有以下几种:哈希切片:根据数据的键值进行哈希计算,然后将数据分布到不同的节点上。这种切片方式可以确保数据在节点之间均匀分布,但可能会导致某些节点负载过重。范围切片:将数据按照一定的范围进行切片,例如按照
redis集群切片的方式有哪些
2024-04-09

redis集群的应用场景有哪些

高并发读写:当系统需要处理大量并发读写请求时,可以通过搭建Redis集群来实现数据的快速读写,提高系统的响应速度和并发处理能力。数据缓存:Redis集群可以作为缓存服务器,将热点数据存储在内存中,减少数据库的访问压力,提高系统的性能和响应速
redis集群的应用场景有哪些
2024-04-29

java连接redis集群的方式有哪些

Java连接Redis集群的方式连接Redis集群的方法有以下几种:使用Redis集群客户端库:Jedis-Cluster、Lettuce-Cluster、Redisson使用低级连接API:底层NIO、jedis自身驱动使用代理:Twemproxy、Codis选择连接方式取决于可用性、可扩展性、性能和功能需求。
java连接redis集群的方式有哪些
2024-04-11

Redis集群模式有哪些及有什么优点

本篇内容主要讲解“Redis集群模式有哪些及有什么优点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis集群模式有哪些及有什么优点”吧!单机模式单机模式的redis非常简单,你只需要启动一
2023-06-27

Redis的集群模式有哪些关键特点

Redis集群模式的关键特点包括:数据分片:Redis集群将数据分散存储在多个节点上,每个节点负责存储部分数据,通过数据分片实现负载均衡和提高性能。节点间通信:Redis集群使用集群总线(cluster bus)进行节点间通信,节点之间通过
Redis的集群模式有哪些关键特点
2024-04-09

redis集群部署常见的问题有哪些

在Redis集群部署过程中,常见的问题包括:节点配置错误:节点的配置文件中存在错误的配置选项或参数,导致节点无法正常启动。网络连接问题:节点之间的网络连接出现问题,导致节点无法正常通信。可能是由于防火墙配置、网络拓扑等原因导致的。数据同步问
2023-10-26

redis哨兵的功能有哪些

Redis哨兵的功能包括:1. 监控:哨兵会定期检查Redis节点的健康状态,包括主服务器和从服务器。如果发现节点故障或下线,哨兵会尝试自动进行故障转移。2. 自动故障转移:当主服务器下线或故障时,哨兵会自动选举一个从服务器作为新的主服务器
2023-08-30

redis中module的功能有哪些

Redis中的模块(module)是一种插件机制,允许开发者编写自定义的命令和数据结构,以扩展Redis的功能。一些常见的Redis模块功能包括:提供新的数据结构:开发者可以编写自定义的数据结构,如图形数据结构、时序数据结构等,以满足特定的
redis中module的功能有哪些
2024-04-16

redis select命令的功能有哪些

在多个数据库之间切换:可以使用SELECT命令在不同的数据库之间进行切换,Redis默认有16个数据库,编号从0到15。查看当前数据库编号:可以使用SELECT命令获取当前正在使用的数据库编号。切换数据库后执行命令:对于同一个连接,切换数据
redis select命令的功能有哪些
2024-04-28

编程热搜

目录