iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >Redis集群有哪些功能
  • 126
分享到

Redis集群有哪些功能

2024-04-02 19:04:59 126人浏览 独家记忆
摘要

本篇内容介绍了“Redis集群有哪些功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  什么是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集群有哪些功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: Redis集群有哪些功能

本文链接: https://www.lsjlt.com/news/61050.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Redis集群有哪些功能
    本篇内容介绍了“Redis集群有哪些功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  什么是Redis...
    99+
    2024-04-02
  • Redis有哪些集群方案
    Redis有哪些集群方案,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 基本原理主从复制模式中包含一个主数据库实例(master)与一...
    99+
    2024-04-02
  • Redis集群搭建的方式有哪些
    这篇文章主要介绍Redis集群搭建的方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、单节点实例单节点实例还是比较简单的,平时做个测试,写个小程序如果需要用到缓存的话,启动一个Redis 还是很轻松的,做为...
    99+
    2023-06-15
  • redis集群的应用场景有哪些
    高并发读写:当系统需要处理大量并发读写请求时,可以通过搭建Redis集群来实现数据的快速读写,提高系统的响应速度和并发处理能力。...
    99+
    2024-04-29
    redis
  • redis集群切片的方式有哪些
    在Redis集群中,数据的切片方式通常有以下几种: 哈希切片:根据数据的键值进行哈希计算,然后将数据分布到不同的节点上。这种切片...
    99+
    2024-04-09
    redis
  • java连接redis集群方式有哪些
    Java连接Redis集群的方式有以下几种:1. 使用Jedis Cluster:Jedis是Redis官方推荐的Java客户端之一...
    99+
    2023-09-16
    redis java
  • node​中如何使用redis集群功能
    小编给大家分享一下node中如何使用redis集群功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!名词解释--集群集群一般是指...
    99+
    2024-04-02
  • mysql集群有哪些
    MySQL集群方案有:LVS+Keepalived+MySQL、DRBD+Heartbeat+MySQL、MySQL Proxy、MySQL Cluster、MySQL + MHA、MySQL + MMM等等,MySQL集群是一个无共享的(...
    99+
    2024-04-02
  • Redis集群模式有哪些及有什么优点
    本篇内容主要讲解“Redis集群模式有哪些及有什么优点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis集群模式有哪些及有什么优点”吧!单机模式单机模式的redis非常简单,你只需要启动一...
    99+
    2023-06-27
  • redis集群部署常见的问题有哪些
    在Redis集群部署过程中,常见的问题包括: 节点配置错误:节点的配置文件中存在错误的配置选项或参数,导致节点无法正常启动。 ...
    99+
    2023-10-26
    redis
  • Tumblr中Redis集群控制层有哪些应用
    小编给大家分享一下Tumblr中Redis集群控制层有哪些应用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!  Tumblr是世界上最流行的轻博客服务,其用户量在最近的一次统计中已经达到2...
    99+
    2024-04-02
  • Redis的集群模式有哪些关键特点
    Redis集群模式的关键特点包括: 数据分片:Redis集群将数据分散存储在多个节点上,每个节点负责存储部分数据,通过数据分片实...
    99+
    2024-04-09
    Redis
  • Redis集群实现了哪些目标
    这篇文章主要介绍了Redis集群实现了哪些目标,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。Redis集群是一个分布式(distributed)...
    99+
    2024-04-02
  • redis哨兵的功能有哪些
    Redis哨兵的功能包括:1. 监控:哨兵会定期检查Redis节点的健康状态,包括主服务器和从服务器。如果发现节点故障或下线,哨兵会...
    99+
    2023-08-30
    redis
  • redis中module的功能有哪些
    Redis中的模块(module)是一种插件机制,允许开发者编写自定义的命令和数据结构,以扩展Redis的功能。一些常见的Redis...
    99+
    2024-04-16
    redis
  • Redis集群有什么用
    这篇文章主要介绍Redis集群有什么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Redis 集群是一个分布式(distributed)、容错(fault-tolerant)的 R...
    99+
    2024-04-02
  • 使用redis集群需要注意的地方有哪些
    小编给大家分享一下使用redis集群需要注意的地方有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Redis集群相对单机在功...
    99+
    2024-04-02
  • redis奇葩数据类型与集群知识有哪些
    本篇文章为大家展示了redis奇葩数据类型与集群知识有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。多样的数据类型string 类型简单方便,支持空间预分配,也就是每次会多分配点空间,这样 st...
    99+
    2023-06-26
  • 有哪些构建Kubernetes集群
    这篇文章主要讲解了“有哪些构建Kubernetes集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些构建Kubernetes集群”吧!集群分析在不同的...
    99+
    2024-04-02
  • redis select命令的功能有哪些
    在多个数据库之间切换:可以使用SELECT命令在不同的数据库之间进行切换,Redis默认有16个数据库,编号从0到15。 查...
    99+
    2024-04-28
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作