向爬虫而生---Redis 探究篇2<redis集群(1)>

前言:

经常会遇到这样的事,redis运行一段时间以后,就会出现迟钝和卡壳! 这时候,说明已经到了瓶颈期了,需要用到redis集群了! 那么,弄明白集群的几个概念是必要的,我用案例来讲,,,

正文:

当需要处理大量数据或提供高可用性和性能时,Redis集群是一种常见的解决方案。Redis集群将数据分布在多个节点上,通过水平扩展来增加性能和容量,并提供自动故障转移和数据复制来提高可用性。

以下是Redis集群的一些关键概念和特性:

1分片(Sharding):

Redis集群使用分片技术将数据分布在多个节点上。每个节点负责存储和处理一部分数据。

当你有一个大规模数据集需要存储在Redis中,但单个Redis节点的容量有限,此时可以使用分片(Sharding)来将数据分布在多个节点上,以实现数据的水平拆分和存储。分片将数据划分为多个片段,并将每个片段存储在不同的节点上。

案例:

假设你有一个 Redis 集群,其中包含 3 个节点:Node 1、Node 2 和 Node 3。你有一个包含 100 万个键的数据集需要存储。现在使用分片技术将数据集分布在这三个节点上。

  1. 确定分片策略: 首先,需要确定如何将数据划分为不同的片段。在 Redis 中,通常使用哈希函数来决定键值的分布。可以选择一个键的一部分或整个键进行哈希,并将其与节点的数量进行取模。例如,我们选择使用键的前缀进行哈希计算。

  2. 哈希分配数据: 对于每个键,应用哈希函数并将其映射到一个节点上。假设使用以下哈希函数计算:

hash(key) = (ASCII码值之和) % 节点数

对于键"key1",计算其哈希值并分配到相应的节点上:

hash("key1") = (107 + 101 + 121 + 49) % 3 = 379 % 3 = 1

因此,"key1"将被分配到 Node 2。

  1. 分配所有键: 对于数据集中的每个键,重复上述步骤,计算哈希值并将其分配到相应的节点上。

例如,对于键"key2",计算其哈希值并分配到相应的节点上:

hash("key2") = (107 + 101 + 121 + 50) % 3 = 380 % 3 = 2

因此,"key2"将被分配到 Node 3。

重复这个过程,直到所有键都被分配到相应的节点上。

  1. 分片后的数据分布: 经过分片后,数据分布如下:
  • Node 1: 包含键 "key3"、"key6"、"key9"、...(分片策略使得这些键哈希到 Node 1)
  • Node 2: 包含键 "key1"、"key4"、"key7"、...(分片策略使得这些键哈希到 Node 2)
  • Node 3: 包含键 "key2"、"key5"、"key8"、...(分片策略使得这些键哈希到 Node 3)

每个节点根据哈希分布保存一部分数据,实现了数据在多个节点上的分布和存储。当读取或写入数据时,通过应用相同的哈希函数,可以确定数据在哪个节点上,并直接操作相应的节点。

PS:分片技术还要处理数据迁移、数据备份和故障转移等问题,以确保高可用性和数据一致性。此外,还可以使用一致性哈希算法等更复杂的哈希策略来解决数据倾斜和负载平衡的问题。

通过分片技术,Redis集群可以水平扩展,提供更高的存储容量和处理能力,适用于处理大规模数据的场景。

2集群节点(Cluster Nodes):

        Redis集群由多个节点组成,每个节点可以运行在不同的机器上。每个节点都有一个唯一的标识符,并负责存储和处理一部分数据。

在Redis集群中,集群节点是由多个Redis实例组成的。每个节点可以运行在不同的机器上,并拥有一个唯一的标识符,用于在集群中进行标识。每个节点负责存储和处理一部分数据,以实现数据的分布和提高整个集群的性能和可用性。

案例:

假设你有一个Redis集群,由3个节点组成:Node 1、Node 2和Node 3。每个节点可以运行在不同的机器上,它们之间通过网络进行通信。

  1. 设置集群节点: 在创建Redis集群之前,你需要保证每个节点运行在一个独立的Redis实例上。你可以在不同的服务器上启动这些实例,并确保它们使用不同的端口和数据目录。例如,Node 1运行在IP地址为192.168.0.1的服务器上,通过端口7001进行监听,Node 2运行在192.168.0.2服务器上的端口7002,Node 3运行在192.168.0.3服务器上的端口7003。

  2. 创建集群: 使用Redis提供的redis-cli命令行工具来创建集群。在任意一个节点上,打开命令行终端,并执行以下命令以创建集群:

redis-cli --cluster create 192.168.0.1:7001 192.168.0.2:7002 192.168.0.3:7003

这将创建一个由这3个节点组成的Redis集群。执行该命令后,节点之间将进行通信,并建立相互之间的联系。

  1. 节点通信: 一旦集群创建成功,各个节点将通过内部二进制协议进行通信,并共享一些信息,例如节点的状态、数据分布等。节点之间将进行数据的迁移、复制和故障转移,以确保数据的一致性和高可用性。

  2. 数据分布: 在Redis集群中,数据按照哈希分布算法进行分片。每个节点负责处理一部分数据。当你在集群中执行写入操作时,Redis将自动将数据发送到正确的节点上。当你需要读取数据时,Redis客户端将根据键的哈希值确定数据在哪个节点上,并直接从该节点读取数据。

通过集群节点,Redis集群实现了数据的分布和负载均衡。每个节点独立处理一部分数据,提高了整个集群的并发处理能力。此外,在节点发生故障时,集群能够进行自动故障转移,并选举新的主节点来保持集群的可用性。这样,Redis集群可以提供高可用性和高性能的数据存储和处理服务。

3数据复制(Replication):

Redis集群中的每个节点都可以有多个副本。这些副本称为从节点(Slave Nodes),它们复制主节点(Master Node)上的数据。数据复制提供了故障转移和数据冗余的能力。

数据复制(Replication)是指在Redis集群中,主节点将其数据复制到一个或多个从节点的过程。这样做的目的是为了实现数据的冗余备份以及故障转移。下面通过一个案例来详细解释什么是数据复制。

案例:

假设你有一个Redis集群,由一个主节点(Master Node)和两个从节点(Slave Nodes)组成:Master、Slave 1和Slave 2。主节点负责处理所有的写入操作,并将其数据复制到从节点上。

  1. 设置主从复制: 在Redis集群中,首先需要将从节点配置为主节点的副本。你可以在每个从节点的配置文件中指定主节点的地址和端口。通常情况下,需要在Slave 1和Slave 2的配置文件中添加以下配置:
replicaof 192.168.0.1 7001

其中,192.168.0.1是主节点的IP地址,7001是主节点的端口号。通过这个配置,从节点将连接到主节点,并开始复制其数据。

  1. 数据复制: 一旦配置正确,从节点将连接到主节点,并开始复制数据。主节点将发送复制指令给从节点,从节点将请求全量数据同步。一旦从节点追上主节点的数据更新,它们之间将保持持续的增量复制。主节点将把每个写操作发送给从节点,以保持数据的一致性。

  2. 故障转移: 当主节点发生故障时(如宕机),Redis集群将从剩余的从节点中选举出一个新的主节点,以确保集群的可用性。选举的依据通常是从节点的优先级、复制偏移量和复制健康状况。一旦选举完成,新的主节点将接管读写操作,并继续将数据复制到其他从节点。

  3. 冗余备份: 通过数据复制,从节点将成为主节点的冗余备份。如果主节点发生故障或数据丢失,可以使用从节点来快速恢复数据,并继续提供服务。从节点可以随时升级为主节点,以继续处理读写操作。

通过数据复制,Redis集群实现了数据的冗余备份和故障转移。主节点负责处理写操作和数据更新,而从节点保持与主节点的同步,并提供数据复制和读访问能力。这样,Redis集群可以提供高可用性和数据冗余的功能,确保数据的安全性和持久性。

4故障转移(Failover):

当主节点不可用时,Redis集群可以自动进行故障转移,将一个从节点升级为新的主节点,以保持集群的可用性。这个过程是自动的,不需要人工干预。

故障转移(Failover)是指在Redis集群中,当主节点不可用时,系统自动将一个从节点提升为新的主节点,以保持集群的可用性。下面通过一个案例来详细解释故障转移的过程。

案例:

假设你有一个Redis集群,由一个主节点(Master Node)和两个从节点(Slave Nodes)组成:Master、Slave 1和Slave 2。主节点负责处理所有的写入操作,从节点复制主节点的数据。

  • 集群正常运行: 初始状态下,Master节点是活动的主节点,而Slave 1和Slave 2是作为从节点连接在Master节点上。
Master (Active)
Slave 1
Slave 2
  • 主节点不可用: 假设由于某种原因,主节点宕机或无法访问。当集群检测到主节点不可用时,它将触发故障转移的过程。
Master (Inactive)
Slave 1
Slave 2
  • 新的主节点选举: 集群中的从节点将竞选出一个新的主节点。在这个过程中,集群将根据一定的规则和条件选择一个新的主节点。通常情况下,可以根据从节点的优先级、复制偏移量和复制健康状况来进行决策。

假设集群选举出Slave 1作为新的主节点:

Slave 1 (Active Master)
Slave 2
  • 数据同步: 一旦新的主节点选出,集群将通知其他从节点切换到新的主节点,并开始将数据复制到它们自己身上。从节点将与新的主节点进行数据同步,追赶到最新的数据状态。
Slave 1 (Active Master)
Slave 2 (Synchronizing)
  • 故障转移完成: 一旦从节点完成数据同步并成为新的主节点的副本,故障转移过程完成。
Slave 1 (Active Master)
Slave 2 (Replica)

通过故障转移,Redis集群能自动地应对主节点的失效,快速选举出新的主节点来继续处理写操作,并维护数据的一致性。故障转移过程是自动的,不需要人工干预,从而提供了高可用性和可靠性的数据服务。


------------------------------------未完待续-----------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot接收参数的几种形式

SpringBoot接收参数的几种形式 在SpringBoot中获取参数基本方式有5种,需要都掌握. 这里需要记住一个技术术语或概念 API接口: 你写好的那个URL地址,就被称为API接口 1. 接收常规参数 给/param/demo1这个URL接口发送id, name两个参数 以上是以GET请求类型进行发送,实际发送…

Kubernetes IoTDB系列 | IoTDB数据库同步|IoTDB数据库高可用 | v1.3.0

目录 一、介绍二、应用场景三、IoTDB 数据库搭建四、数据同步一、介绍 IoTDB 数据同步功能可以将 IoTDB 的数据传输到另一个数据平台,我们将一个数据同步任务称为 Pipe。 一个 Pipe 包含三个子任务(插件): 抽取(Extract)处理(Process)发送(Connect)Pipe 允许用户自…

周鸿祎免费课演示AI新品,瞬时流量暴增现场增加服务器

2月29日,360创始人周鸿祎首堂AI免费课开讲,吸引千万网友围观。演讲现场周鸿祎演示了两款AI驱动的新产品。在演示测试版360AI搜索时,由于用户体验火爆,瞬时流量暴增44倍,为满足用户和全网用户需求临时增加了服务器。产品…

springboot+vue网站开发-渲染前端列表页面-缩略图信息

springbootvue网站开发-渲染前端列表页面-缩略图信息!内容比较多。这是第一篇,先给大家展示的是,基础的代码封装,vue前端网站模块的代码展示。 我们使用到了pinia-存储我们请求过来的数据,它是一个状态管理&#xff0c…

android开发平台,Java+性能优化+APP开发+NDK+跨平台技术

开头 通常作为一个Android APP开发者,我们并不关心Android的源代码实现,不过随着Android开发者越来越多,企业在筛选Android程序员时越来越看中一个程序员对于Android底层的理解和思考,这里的底层主要就是Android Framewok中各个组…

linux 安装node20

由于Node.js 的官方仓库中可能不会包含所有历史版本,特别是较新的版本,您可以采用以下步骤来安装: 使用 nvm (Node Version Manager) 安装 nvm 是一个方便的工具,可以让你在单个系统上管理多个 Node.js 版本。首先安装 nvm&…

老卫带你学---leetcode刷题(191. 位1的个数)

191. 位1的个数 问题 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 提示: 请注意,在某些语言&…

linux文件及文件内容查找命令总结

在linux环境下,我们经常要查找一个文件或者文件的内容,但搜索的命令有很多,这些命令都有什么区别,应该怎么选择和使用呢? 下面总结了一些常见的文件查找、内容查找的命令,收藏起来备用吧。 文件查找 where…

二叉树——二叉树所有路径

二叉树所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [1,2,3,null,5] 输出:["1->2->5","1-…

华为云项目部署

前端部署 将dist文件夹下的内容拷贝到/usr/local/nginx/html下 #启动脚本是在 # /usr/local/nginx/sbin/nginx #启动 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #停止 /usr/local/nginx/sbin/nginx -s stop #重载 /usr/local/nginx/sbin/nginx -s rel…

LeetCode 第45天 | 57. 爬楼梯 322. 零钱兑换 518. 零钱兑换II 279. 完全平方数 动态规划

57. 爬楼梯&#xff08;第八期模拟笔试&#xff09; 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 输入描述 输入共一行&…

Go语言必知必会100问题-10 小心类型嵌入导致的问题

小心类型嵌入导致的问题 在定义结构体时&#xff0c;Go语言支持通过类型嵌入的形式定义结构体字段。但是&#xff0c;如果我们没有真正理解类型嵌入的意义&#xff0c;有时可能会导致意想不到的行为。本文将主要分析如何嵌入类型&#xff0c;类型嵌入的作用以及可能出现的问题…

TypeScript 中,接口(interface)可以描述几种不同类型的属性和结构

在 TypeScript 中&#xff0c;接口&#xff08;interface&#xff09;可以描述几种不同类型的属性和结构。以下是你可以在接口中定义的一些常见属性和结构&#xff1a; 属性签名 - 描述对象属性的名称和类型。 interface Person {name: string;age: number; }方法签名 - 描述函…

Linux之定时任务02

一、什么是crond Linux 中 crond 就是定时任务&#xff0c;即根据 crond 指定的时间&#xff0c;由系统按指定的时间&#xff0c;周期性&#xff0c;自动触发的事件。 crond 服务在默认的情况下会每分钟检查系统中是否有定时任务&#xff0c;如果有且符合触发条件&#xff0c;…

sql中如何实现递归

在SQL中&#xff0c;递归通常是通过使用公用表表达式&#xff08;Common Table Expressions&#xff0c;CTE&#xff09;来实现的。CTE允许你定义一个临时的结果集&#xff0c;该结果集可以在一个SELECT、INSERT、UPDATE或DELETE语句的主体中被引用。 递归CTE有两个关键部分&a…

vue前端使用get方式获取api接口数据 亲测

// GET请求示例 axios.get(‘http://127.0.0.1:5005/ReadIDCardInfo’) // 将URL替换为真正的API接口地址 .then(response > { if(response.data.code1){ var jsonDataresponse.data.data; console.log(jsonData); // 输出从API接口返回的数据 } }) .catch(error > { con…

MySQL(基础篇)——事务

一.事务简介 事务是一组操作的集合&#xff0c;他是一个不可分割的单位&#xff0c;事务会把所有的操作作色一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 默认MySQL的事务是自动提交的&#xff0c;也就是说&#xff0c…

VS Code常用快捷键

前言 对于开发者而言&#xff0c;熟悉快捷键的使用&#xff0c;能够起到事半功倍的作用&#xff0c;提高工作效率。以下是我整理的一份VS Code常用快捷键清单&#xff0c;希望能够帮助到你&#xff0c;欢迎在评论区留下你的常用快捷键&#x1f91e;。 设置VS Code中的键盘快捷…

抖音视频评论提取软件|视频数据批量采集工具

抖音视频评论批量下载软件是一款基于C#开发的高效工具&#xff0c;旨在帮助用户快速获取抖音视频评论数据。无论您是市场分析师、社交媒体管理者还是数据研究人员&#xff0c;这款软件都会成为您工作中不可或缺的利器。 软件的关键功能包括&#xff1a; 关键词搜索&#xff1…

AI智能电销机器人效果怎么样?呼叫部署

我们的生活早已变得无处不智能&#xff0c;从智能手机到无人车、虚拟VR到智能家居&#xff0c;你迎接的每一个清晨、享受的每一个夜晚&#xff0c;可能都离不开智能设备的服务。 工作中&#xff0c;智能化产业也正在影响着企业&#xff0c;电销机器人正在帮助各大企业获得更高的…