向爬虫而生---Redis 探究篇2<redis集群(1)>
前言:
经常会遇到这样的事,redis运行一段时间以后,就会出现迟钝和卡壳! 这时候,说明已经到了瓶颈期了,需要用到redis集群了! 那么,弄明白集群的几个概念是必要的,我用案例来讲,,,
正文:
当需要处理大量数据或提供高可用性和性能时,Redis集群是一种常见的解决方案。Redis集群将数据分布在多个节点上,通过水平扩展来增加性能和容量,并提供自动故障转移和数据复制来提高可用性。
以下是Redis集群的一些关键概念和特性:
1分片(Sharding):
Redis集群使用分片技术将数据分布在多个节点上。每个节点负责存储和处理一部分数据。
当你有一个大规模数据集需要存储在Redis中,但单个Redis节点的容量有限,此时可以使用分片(Sharding)来将数据分布在多个节点上,以实现数据的水平拆分和存储。分片将数据划分为多个片段,并将每个片段存储在不同的节点上。
案例:
假设你有一个 Redis 集群,其中包含 3 个节点:Node 1、Node 2 和 Node 3。你有一个包含 100 万个键的数据集需要存储。现在使用分片技术将数据集分布在这三个节点上。
-
确定分片策略: 首先,需要确定如何将数据划分为不同的片段。在 Redis 中,通常使用哈希函数来决定键值的分布。可以选择一个键的一部分或整个键进行哈希,并将其与节点的数量进行取模。例如,我们选择使用键的前缀进行哈希计算。
-
哈希分配数据: 对于每个键,应用哈希函数并将其映射到一个节点上。假设使用以下哈希函数计算:
hash(key) = (ASCII码值之和) % 节点数
对于键"key1",计算其哈希值并分配到相应的节点上:
hash("key1") = (107 + 101 + 121 + 49) % 3 = 379 % 3 = 1
因此,"key1"将被分配到 Node 2。
- 分配所有键: 对于数据集中的每个键,重复上述步骤,计算哈希值并将其分配到相应的节点上。
例如,对于键"key2",计算其哈希值并分配到相应的节点上:
hash("key2") = (107 + 101 + 121 + 50) % 3 = 380 % 3 = 2
因此,"key2"将被分配到 Node 3。
重复这个过程,直到所有键都被分配到相应的节点上。
- 分片后的数据分布: 经过分片后,数据分布如下:
- 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。每个节点可以运行在不同的机器上,它们之间通过网络进行通信。
-
设置集群节点: 在创建Redis集群之前,你需要保证每个节点运行在一个独立的Redis实例上。你可以在不同的服务器上启动这些实例,并确保它们使用不同的端口和数据目录。例如,Node 1运行在IP地址为192.168.0.1的服务器上,通过端口7001进行监听,Node 2运行在192.168.0.2服务器上的端口7002,Node 3运行在192.168.0.3服务器上的端口7003。
-
创建集群: 使用Redis提供的
redis-cli命令行工具来创建集群。在任意一个节点上,打开命令行终端,并执行以下命令以创建集群:
redis-cli --cluster create 192.168.0.1:7001 192.168.0.2:7002 192.168.0.3:7003
这将创建一个由这3个节点组成的Redis集群。执行该命令后,节点之间将进行通信,并建立相互之间的联系。
-
节点通信: 一旦集群创建成功,各个节点将通过内部二进制协议进行通信,并共享一些信息,例如节点的状态、数据分布等。节点之间将进行数据的迁移、复制和故障转移,以确保数据的一致性和高可用性。
-
数据分布: 在Redis集群中,数据按照哈希分布算法进行分片。每个节点负责处理一部分数据。当你在集群中执行写入操作时,Redis将自动将数据发送到正确的节点上。当你需要读取数据时,Redis客户端将根据键的哈希值确定数据在哪个节点上,并直接从该节点读取数据。
通过集群节点,Redis集群实现了数据的分布和负载均衡。每个节点独立处理一部分数据,提高了整个集群的并发处理能力。此外,在节点发生故障时,集群能够进行自动故障转移,并选举新的主节点来保持集群的可用性。这样,Redis集群可以提供高可用性和高性能的数据存储和处理服务。
3数据复制(Replication):
Redis集群中的每个节点都可以有多个副本。这些副本称为从节点(Slave Nodes),它们复制主节点(Master Node)上的数据。数据复制提供了故障转移和数据冗余的能力。
数据复制(Replication)是指在Redis集群中,主节点将其数据复制到一个或多个从节点的过程。这样做的目的是为了实现数据的冗余备份以及故障转移。下面通过一个案例来详细解释什么是数据复制。
案例:
假设你有一个Redis集群,由一个主节点(Master Node)和两个从节点(Slave Nodes)组成:Master、Slave 1和Slave 2。主节点负责处理所有的写入操作,并将其数据复制到从节点上。
- 设置主从复制: 在Redis集群中,首先需要将从节点配置为主节点的副本。你可以在每个从节点的配置文件中指定主节点的地址和端口。通常情况下,需要在Slave 1和Slave 2的配置文件中添加以下配置:
replicaof 192.168.0.1 7001
其中,192.168.0.1是主节点的IP地址,7001是主节点的端口号。通过这个配置,从节点将连接到主节点,并开始复制其数据。
-
数据复制: 一旦配置正确,从节点将连接到主节点,并开始复制数据。主节点将发送复制指令给从节点,从节点将请求全量数据同步。一旦从节点追上主节点的数据更新,它们之间将保持持续的增量复制。主节点将把每个写操作发送给从节点,以保持数据的一致性。
-
故障转移: 当主节点发生故障时(如宕机),Redis集群将从剩余的从节点中选举出一个新的主节点,以确保集群的可用性。选举的依据通常是从节点的优先级、复制偏移量和复制健康状况。一旦选举完成,新的主节点将接管读写操作,并继续将数据复制到其他从节点。
-
冗余备份: 通过数据复制,从节点将成为主节点的冗余备份。如果主节点发生故障或数据丢失,可以使用从节点来快速恢复数据,并继续提供服务。从节点可以随时升级为主节点,以继续处理读写操作。
通过数据复制,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集群能自动地应对主节点的失效,快速选举出新的主节点来继续处理写操作,并维护数据的一致性。故障转移过程是自动的,不需要人工干预,从而提供了高可用性和可靠性的数据服务。
------------------------------------未完待续-----------------------------------------
相关文章:
向爬虫而生---Redis 探究篇2<redis集群(1)>
前言: 经常会遇到这样的事,redis运行一段时间以后,就会出现迟钝和卡壳! 这时候,说明已经到了瓶颈期了,需要用到redis集群了! 那么,弄明白集群的几个概念是必要的,我用案例来讲,,, 正文: 当需要处理大量数据或提供高可用性和性能时,Redis集群是一种常见的解决方案。…...
[云原生] 二进制安装K8S(上)搭建单机matser、etcd集群和node节点
一、单机matser预部署设计 目前Kubernetes最新版本是v1.25,但大部分公司一般不会使用最新版本。 目前公司使用比较多的:老版本是v1.15,因为v1.16改变了很多API接口版本,国内目前使用比较多的是v1.18、v1.20。 组件部署ÿ…...
乘积尾零(蓝桥杯)
文章目录 乘积尾零题目描述代码 乘积尾零 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 如下的 10 行数据,每行有 10 个整数,请你求出它们的乘积的末尾有多少个零? 5650 454…...
项目解决方案: 实时视频拼接方案介绍
目 录 1、实时视频拼接概述 2、适用场景 3、系统介绍 3.1拼接形式 3.1.1横向拼接 3.1.2纵向拼接 3.2前端选择 3.2.1前端类型 3.2.2推荐配置 3.3后端选择 3.3.1录像回放 3.3.2客户端展示 4、拼接方案介绍 4.1基于4K摄像机的拼接方案 4.1.1系统架构…...
雾锁王国Enshrouded服务器CPU内存配置怎么选择?
雾锁王国/Enshrouded服务器CPU内存配置如何选择?阿里云服务器网aliyunfuwuqi.com建议选择8核32G配置,支持4人玩家畅玩,自带10M公网带宽,1个月90元,3个月271元,幻兽帕鲁服务器申请页面 https://t.aliyun.com…...
yolov9,使用自定义的数据训练推理
[源码 🐋]( GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information) [论文 📘](arxiv.org/pdf/2402.13616.pdf) 论文摘要:本文介绍了一种新的目标检测…...
企业文件图纸加密有哪些?图纸文件加密防泄密软件如何选?
在现在的市场发展中,对于企业的图纸文件安全问题越来越重视,如设计图纸,重要文件等,一旦泄漏就会给企业造成巨大的经济损失。所以对企业管理者来讲,如何才能选择一款好用的适合本企业的图纸文件加密软件是非常重要的&a…...
phpldapadmin This base cannot be created with PLA
phpldapadmin This base cannot be created with PLA 1、问题描述2、问题分析3、解决方法:创建根节点 1、问题描述 安装phpldapadmin参考链接: https://blog.csdn.net/OceanWaves1993/article/details/136048686?spm1001.2014.3001.5501 刚安装完成phpldapadmin&…...
如何开发自己的npm包并上传到npm官网可以下载
目录 搭建文件结构 开始编写 发布到npm 如何下载我们发布的npm包 搭建文件结构 先创建新文件夹,按照下面的样子布局 .├── README.md //说明文档 ├── index.js //主入口 ├── lib //功能文件 └── tests //测试用例 然后再此根目录下初始化package包 npm init…...
Linux Shell脚本练习(一)
一、 Linux下执行Shell脚本的方式: 1、用shell程序执行脚本: a、根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等 b、程序的第一行#!/bin/bash里面指明了shell类型的,比如#!/…...
面试数据库篇(mysql)- 11主从同步
原理 MySQL主从复制的核心就是二进制日志 二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句。 复…...
Python中的os库
一.OS库简介 OS是Operating System的简写,即操作系统。 OS库是一个操作系统接口模块,提供一些方便使用操作系统相关功能的函数。 二.OS库常用函数 2.1文件和目录 2.1.1:os.getcwd() 作用:返回当前工作目录,结果是…...
C++ | 使用正则表达式匹配特定形式的字符串
C | 使用正则表达式匹配特定形式的字符串 在 C 中,可以使用 <regex> 头文件提供的正则表达式库来对特定形式的字符串进行匹配操作。 常用的正则表达式模式语法 普通字符: 普通字符会按照其字面意义进行匹配,例如 a 会匹配字符 a。 转…...
计算机组成原理-第一/二章 概述和数据的表示和运算【期末复习|考研复习】
文章目录 前言第一章 计算机组成原理 概述及各种码1.1 计算机硬件的基本组成1.1.1 存储器1.1.2 运算器1.1.3 控制器 1.2 计算机的工作过程1.3 计算机的性能指标1.4 各个字长区别与联系 第二章 数据的表示与运算2.1 ASCII码2.2 各种码2.3 浮点数 总结 前言 给大家整理了一下计算…...
基于transform的scale属性,动态缩放整个页面,实现数据可视化大屏自适应,保持比例不变形,满足不同分辨率的需求
文章目录 一、需求背景:二、需求分析:三、选择方案:四、实现代码:五、效果预览:六、封装组件: 一、需求背景: 数据可视化大屏是一种将数据、信息和可视化效果集中展示在一块或多块大屏幕上的技…...
Linux第67步_linux字符设备驱动_注册和注销
1、字符设备注册与注销的函数原型” /*字符设备注册的函数原型*/ static inline int register_chrdev(unsigned int major,\ const char *name, \ const struct file_operations *fops) /* major:主设备号,Limnux下每个设备都有一个设备号,设备号分…...
设计模式:软件工程的艺术
引言 设计模式是软件工程中一种解决常见问题的经验总结,是一套可复用的设计思想。它们提供了在特定情境下的解决方案,有助于构建可维护、灵活、可复用、可扩展的软件系统。设计模式是对软件设计中通用问题的抽象,提供了一种共享的语言和思维…...
试题 算法训练 数的潜能
资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 将一个数N分为多个正整数之和,即Na1a2a3…ak,定义Ma1*a2*a3*…*ak为N的潜能。 给定N,…...
OpenAI Triton 入门教程
文章目录 Triton 简介背景Triton 与 CUDA 的关系 Triton 开发样例样例一:Triton vector addition 算子Triton kernel 实现kernel 函数封装函数调用性能测试 样例二:融合 Softmax 算子动机Triton kernel 实现kernel 封装单元测试性能测试 样例三ÿ…...
【flask+python】利用魔术方法,更优雅的封装model类
定义model # Time :2024-2024/2/27-14:49 # Email :514422868qq.com # Author :Justin # file :user.py # Software :01-fishbook from app.model.base import Base from sqlalchemy import Column, Integer, SmallInteger, String from werkzeug.security …...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
