首页 数据库 Redis 什么是redis集群

什么是redis集群

Jun 04, 2019 pm 04:31 PM
redis集群

什么是redis集群

Redis集群介绍

Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。

Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.

Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:

自动分割数据到不同的节点上。

整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

Redis 集群的数据分片

Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.

Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:

节点 A 包含 0 到 5500号哈希槽.

节点 B 包含5501 到 11000 号哈希槽.

节点 C 包含11001 到 16384号哈希槽.

这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D上. 如果我想移除节点A,需要将A中的槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.

Redis 集群的主从复制模型

为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个节点都会有N-1个复制品.

在我们例子中具有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用.

然而如果在集群创建的时候(或者过一段时间)我们为每个节点添加一个从节点A1,B1,C1,那么整个集群便有三个master节点和三个slave节点组成,这样在节点B失败后,集群便会选举B1为新的主节点继续服务,整个集群便不会因为槽找不到而不可用了

不过当B和B1 都失败后,集群是不可用的.

Redis 一致性保证

Redis 并不能保证数据的强一致性. 这意味这在实际中集群在特定的条件下可能会丢失写操作.

第一个原因是因为集群是用了异步复制. 写操作过程:

客户端向主节点B写入一条命令.

主节点B向客户端回复命令状态.

主节点将写操作复制给他得从节点 B1, B2 和 B3.

主节点对命令的复制工作发生在返回命令回复之后, 因为如果每次处理命令请求都需要等待复制操作完成的话, 那么主节点处理命令请求的速度将极大地降低 —— 我们必须在性能和一致性之间做出权衡。 注意:Redis 集群可能会在将来提供同步写的方法。 Redis 集群另外一种可能会丢失命令的情况是集群出现了网络分区, 并且一个客户端与至少包括一个主节点在内的少数实例被孤立。

举个例子 假设集群包含 A 、 B 、 C 、 A1 、 B1 、 C1 六个节点, 其中 A 、B 、C 为主节点, A1 、B1 、C1 为A,B,C的从节点, 还有一个客户端 Z1 假设集群中发生网络分区,那么集群可能会分为两方,大部分的一方包含节点 A 、C 、A1 、B1 和 C1 ,小部分的一方则包含节点 B 和客户端 Z1 .

Z1仍然能够向主节点B中写入, 如果网络分区发生时间较短,那么集群将会继续正常运作,如果分区的时间足够让大部分的一方将B1选举为新的master,那么Z1写入B中得数据便丢失了.

以上是什么是redis集群的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

PHP教程
1598
276
利用ThinkPHP6实现Redis集群 利用ThinkPHP6实现Redis集群 Jun 20, 2023 am 08:36 AM

随着互联网的迅速发展,高并发的问题也愈发突出。针对这个问题,Redis的出现成为了一个重要的方案,它通过内存读写的方式,解决了传统关系型数据库读写压力过大的问题。然而,单节点Redis在高并发情况下仍然存在性能瓶颈,因此需要使用Redis集群。本文将讲述如何使用ThinkPHP6实现Redis集群。一、Redis集群介绍Redis集群是Redis官方提供的分

如何通过Redis实现PHP数据缓存的集群部署? 如何通过Redis实现PHP数据缓存的集群部署? Aug 10, 2023 am 08:13 AM

如何通过Redis实现PHP数据缓存的集群部署?简介:PHP应用在面对高并发和大流量时,经常会遇到数据库性能瓶颈的问题,这时候使用缓存技术能很好地提升系统的性能和并发能力。Redis作为一个高性能的内存键值数据库,被广泛应用于缓存方案的实现。本文将介绍如何通过Redis实现PHP数据缓存的集群部署,以进一步提升性能和可扩展性。一、Redis集群概述Redis

Redis中的Redis集群和PHP的使用方法 Redis中的Redis集群和PHP的使用方法 May 15, 2023 pm 03:22 PM

Redis是一款强大的内存键值对存储数据库。与常规的RDBMS(关系型数据库管理系统)相比,它具有更高的性能和更好的伸缩性。Redis的优点之一是它可以作为分布式系统的核心技术。在这篇文章中,我们将探讨Redis集群的概念以及如何在PHP中使用Redis集群。Redis集群是什么?简单来说,Redis集群即为多个Redis实例的聚合体。Redis集群允许我们

学习Go语言中的数据库函数并实现Redis集群的读写操作 学习Go语言中的数据库函数并实现Redis集群的读写操作 Jul 29, 2023 pm 12:21 PM

学习Go语言中的数据库函数并实现Redis集群的读写操作引言:数据库是当今互联网应用不可或缺的一部分,而Go语言作为一门开发简洁高效的编程语言,也具备了良好的数据库操作能力。本文将介绍如何在Go语言中使用数据库函数,并实现Redis集群的读写操作。一、Go语言中的数据库函数Go语言中对数据库的操作主要通过database/sql包来实现。该包提供了基本的数据

Redis与Node.js的集群方案:如何实现高可用性 Redis与Node.js的集群方案:如何实现高可用性 Jul 29, 2023 pm 05:42 PM

Redis与Node.js的集群方案:如何实现高可用性引言:随着互联网的快速发展,数据的处理变得越来越庞大和复杂。为了保证系统的高可用性和可扩展性,我们需要使用分布式集群架构来处理存储和处理大量数据的需求。Redis作为一种高性能的内存数据库,结合Node.js作为后端编程语言,可以构建高可用的分布式集群方案。本文将介绍如何使用Redis与Node.js实现

Redis与PHP的集群方案:如何实现高可用性和扩展性 Redis与PHP的集群方案:如何实现高可用性和扩展性 Jul 30, 2023 pm 08:51 PM

Redis与PHP的集群方案:如何实现高可用性和扩展性引言:Redis是一种开源的高性能内存数据库,常用于构建快速、可扩展的应用程序。而PHP作为一门流行的服务器端脚本语言,与Redis配合使用能够实现高可用性和扩展性的集群方案。本文将介绍如何使用Redis与PHP搭建一个高可用性和扩展性的集群,并通过代码示例详细说明。一、Redis集群的搭建安装和配置Re

如何利用Redis和Julia语言实现高可用集群功能 如何利用Redis和Julia语言实现高可用集群功能 Sep 20, 2023 am 10:58 AM

如何利用Redis和Julia语言实现高可用集群功能引言:随着互联网业务的发展,对于系统的可用性要求越来越高。为了确保系统在出现故障时能够继续提供服务,高可用性成为了各个行业中的关键需求之一。本文将介绍如何利用Redis和Julia语言实现高可用集群功能,并提供具体的代码示例。一、什么是高可用集群高可用集群是通过将多个节点组织在一起,从而形成一个整体的系统,

Redis集群扩容方案及实现细节 Redis集群扩容方案及实现细节 Jun 21, 2023 am 10:58 AM

Redis是一个高性能的开源内存数据存储服务,因其快速读写速度、可持久化存储和多种数据结构支持,越来越受到开发者们的青睐。随着业务的不断壮大,Redis的存储容量已经无法满足需求,这时需要进行扩容。本文将介绍Redis集群扩容的方案及其实现细节。Redis集群的概念Redis集群是指将多个Redis实例连接在一起,形成一个大的Redis实例集合,可以提高Re

See all articles