java面试:了解redis的集群么,怎么通过redis的集群来实现redis的高可用?

我们知道,为了帮助数据库缓解高并发的压力,我们会上reids缓存帮助数据库分摊,虽说常见场景的并发量还不足以让redis宕机,但假设出现了极高的并发场景,redis依旧是有宕机的可能的,毕竟单点部署的redis容易出现的问题很多,而为了优化这一点,reids就衍生出了许多集群来帮助reids来实现高可用。

1.什么是redis的集群,redis的集群都有哪些

     redis集群是 redis 官方提供的分布式解决方案,用于将数据自动分片到多个节点上,实现数据的拓展,同时提供高可用性,通过redis的集群可以帮助redis解决一些单点布置会发生的一系列故障问题。

     redis的集群主要是分主从集群,哨兵集群以及分片集群,当然还存在其他的为特殊需求所构建的集群,不过我们重点需要学习的就是这三种集群。

2.redis的主从集群

     当部署的单点redis宕机以后,大量的请求就会打入数据库,为了解决这种情况我们就会部署多个redis来组成主从集群,从中的节点分为主节点和从节点两个身份,主节点只允许写入数据而从节点只允许读取数据,而从节点的数据通过主从复制来从主节点中获取数据。

     主从复制具体的是分成两种形式,分别是全量复制和增量复制,接下来我会区分二者讲解:

全量复制:

  • 执行时机:当部署新的从节点或者旧的从节点在宕机很久后恢复

  • 基本概念:意味着从节点会复制主节点的全量数据

  • 底层实现:主节点执行bgsave的命令生成RDB文件,发送给从节点,而从节点获取到RDB文件后会加载到内存当中,这就获取了全量数据,假设RDB文件制作过程中又有新的写命令进入,那就通过将命令存入暂存区,在同步完后发送。

增量复制:

  • 执行时机:当从节点已经包含一定数据,且一直正常运行或宕机时间不长

  • 基本概念:意味着从节点会不断的获取主节点新增的数据

  • 底层实现:当主从完成全量复制以后会通过TCP维持一个主从的长连接,这样在获取到新的写操作命令后,主节点就会异步的将这些写命令发送给从节点。

     这里有个小知识点,为什么全量复制要使用RDB而非AOF?这个原因有两点,第一是RDB保存的二进制的数据文件,而AOF保存的是写命令,相比之下RDB的文件更小更轻巧。第二就是RDB的数据恢复速度很快,而AOF的是执行写命令操作,这样效率就很慢了。

     这样的一个集群具有两个好处,首先部署多台redis可以分散请求,降低单点的并发量,其次即使主节点依旧被海量压力冲跨,或者出现意外导致宕机,可以通过主从集群的特性来选举新的主节点,并同时监控宕机的主节点在恢复后设置为从节点。

3.redis的哨兵集群

     我们可以想象一个场景,按照redis自己所处的主从情况之下,我们会发现假设主节点宕机,就需要手动的从多个从节点中推举出一个新的主节点,再手动的转从为主,这光是看着就很麻烦,因此redis就创造了哨兵集群,哨兵集群能够自动监控所有redis节点的状态,假设主节点宕机,就会自动的做主从故障的转移,这样就会方便许多。

     那哨兵集群究竟是怎么知道主节点宕机的呢?

     哨兵集会和其他节点建立一个心跳检测,不断的向主节点发送ping的命令,而一旦发现主节点长时间没有回应,这个哨兵节点就会判断主节点为主观下线,但是一个哨兵节点长时间接受不到主节点回应的因素是很多的,例如网络因素等,因此只能判断为主观下线,所以一般来说只有一个集群中超半数的哨兵节点都认为主节点下线,这个主节点才会被判断为客观下线。

     在哨兵节点判断主节点宕机以后,如何选择新的主节点呢?

     首先哨兵集群会通过raft的leader算法来选举哨兵当中的leader节点,后用这个leader节点来选举新的主节点,具体的规则如下:            

     在选取新的主节点后,会通过主从复制将新选举的主节点的数据复制给其他从节点,之后就会将新的主节点数据发送给客户端。

     而在设置好新的主节点后,哨兵leader依旧会继续监视旧的主节点,当旧的主节点恢复后就会将其设置为新的从节点。

4.redis的分片集群

     对比最原始的主从集群,我们会发现几个问题:

     首先不论主节点还是从节点存储的都是全量数据,虽说在创建主从的时候是部署了多台redis,但在最终的存储量依旧是要看主节点的内存量的,因此原始的主从内存量是单机情况内存是不够的,就算勉强够用,也会导致RDB文件变大使得每次数据复制的速度变慢。

     其次就是只有单一的主节点能执行写操作,假设需要设置另一个类型的数据库,就无法拓展新的写操作命令。

     正因为有这两个问题存在,redis的分片集群也就诞生了,redis的分片集群是部署多台redis组成集群,每个redis节点都可以单独做写操作,并且可以分散存储数据,不过这里有一个问题,就是redis节点可能会出现宕机的情况,为了解决这个问题,我们会对每个节点做主从,因此分片集群可以粗略当成多个主从集群组成的集群。

     为了做数据分片,分片集群准备了16384个hash槽,将这些槽平均分给不同的节点,当数据进入时,使用CRC16算法去获取到数据应当存储槽的位置,不过在槽发生扩容缩容的时候可能会导致槽的位置迁移,不过分片集群会做一个检测,假设槽与对应的节点不匹配,就会通知客户端并重新匹配。

     为了完成节点之间的通信,redis集群利用了Gossip协议,具体方式如下:

而分片集群的主从故障也是通过Gossip协议来检测其他的节点而非像基础的哨兵集群,各个主节点会互相检测,假设一半以上主节点认为某个主节点宕机,就会通过其从节点找出新的主节点,再用fail通知其他的节点。

今天的分享就到这里了,希望这篇博客能给你一些帮助,让你对关于redis的集群的问题得到进一步的提升,在面试的时候能从容面对面试官。

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

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

相关文章

氧气科技亮相GDMS全球数字营销峰会,分享AI搜索时代GEO新观

2025年9月16日,全球数字营销领域的年度盛会——GDMS(Global Digital Marketing Summit)在上海国家会展中心盛大举行。作为品牌数字化转型的风向标,本届峰会汇聚来自全球的CEO、CMO、CDO及营销领域高管,共同探讨AI驱动下…

搭建Gin通用框架

Gin Web 开发脚手架技术文档 项目概述 本项目是一个基于 Gin 框架的 Go Web 开发脚手架模板,提供了完整的项目结构、配置管理、日志记录、MySQL 和 Redis 数据库连接等常用功能集成。 项目结构 gindemo/ ├── gindemo.exe # 编译后的可执行文件 ├── g…

windows 平台下 ffmpeg 硬件编解码环境查看

环境: 1,nvidia 显卡 2,驱动安装 powershell 下 执行如下命令,出现GPU信息 说明驱动安装正常。 nvidia-smi 3,安装支持 NVENC 的 FFmpeg (1)Windows 下 编译 FFmpeg 需要 CUDA Toolkit &am…

08_多层感知机

1. 单层感知机 1.1 感知机① 线性回归输出的是一个实数&#xff0c;感知机输出的是一个离散的类。1.2 训练感知机 ① 如果分类正确的话y<w,x>为正数&#xff0c;负号后变为一个负数&#xff0c;max后输出为0&#xff0c;则梯度不进行更新。 ② 如果分类错了&#xff0c;y…

安卓实现miniLzo压缩算法

LZO官方源码 http://www.oberhumer.com/opensource/lzo 找到miniLZO点击Dowload miniLZO下载源码 http://www.oberhumer.com/opensource/lzo/download/minilzo-2.10.tar.gz demo源码(包含安卓) https://github.com/xzw421771880/MiniLzo_Mobile.git 1.代码部分 1.1.测试…

如何在ubuntu下用pip安装aider,解决各种报错问题

aider中文文档网站上给出的安装说明比较简单&#xff1a; https://aider.doczh.com/docs/install.html 但是在一个干净的ubuntu环境中按文档中的命令安装时&#xff0c;会报错&#xff0c;经过一番尝试之后&#xff0c;解决了报错问题&#xff0c;成功完成了安装。 成功安装执…

Kotlin flow详解

流式数据处理基础 Kotlin Flow 是基于协程的流式数据处理 API&#xff0c;要深入理解 Flow&#xff0c;首先需要明确流的概念及其处理方式。 流(Stream)如同水流&#xff0c;是一种连续不断的数据序列&#xff0c;在编程中具有以下核心特征&#xff1a; 数据按顺序产生和消费支…

DeepSeek V3 深度解析:MoE、MLA 与 GRPO 的架构革新

简介 DeepSeek&#xff08;深度求索&#xff09;是一家源自中国的人工智能公司&#xff0c;成立于2023年&#xff0c;总部位于中国杭州。前身是国内量化投资巨头幻方量化的子公司。公司专注于开发低成本、高性能的AI模型&#xff0c;致力于通过技术创新推动人工智能技术的普惠…

Flask学习笔记(三)--URL构建与模板的使用

一、URL构建url_for()函数对于动态构建特定函数的URL非常有用。 该函数接受函数的名称作为第一个参数&#xff0c;并接受一个或多个关键字参数&#xff0c;每个参数对应于URL的变量部分。from flask import Flask, redirect, url_forapp Flask(__name__)app.route(/admin)def …

Pyside6 + QML - 从官方的例程开始

导言如上所示&#xff0c;登上Qt Pyside6的官方网址&#xff1a;https://doc.qt.io/qtforpython-6/index.html&#xff0c;点击“Write your first Qt application”的"Start here!"按钮。 效果&#xff1a;工程代码&#xff1a; github:https://github.com/q1641293…

Python爬虫实战:研究Pandas,构建物联网数据采集和分析系统

1. 引言 1.1 研究背景 物联网(Internet of Things, IoT)作为新一代信息技术的重要组成部分,已广泛应用于智能交通、环境监测、智慧家居等多个领域。据 Gartner 预测,到 2025 年全球物联网设备数量将达到 750 亿台,产生的数据量将突破 zettabyte 级别。物联网平台作为数据…

深度学习入门基石:线性回归与 Softmax 回归精讲

一、线性回归&#xff1a;从房价预测看懂 “连续值预测” 逻辑 线性回归是深度学习的 “敲门砖”&#xff0c;它的核心思想是用线性关系拟合数据规律&#xff0c;解决连续值预测问题—— 比如根据房屋特征估算房价、根据温度湿度预测降雨量等。 1. 从生活案例到数学模型 拿房价…

GPT-5-Codex CLI保姆级教程:获取API Key配置与openai codex安装详解

朋友们&#xff0c;就在 2025 年 9 月中旬&#xff0c;OpenAI 悄悄扔下了一颗重磅炸弹&#xff1a;GPT-5-Codex。 如果你以为这只是又一次平平无奇的模型升级&#xff0c;那可就大错特错了。 我可以这么说&#xff1a;软件开发的游戏规则&#xff0c;从这一刻起&#xff0c;可能…

基于Spark的用户实时分析

Spark的最简安装 1. 下载并解压 Spark 首先,我们需要下载 Spark 安装包。您可以选择以下方式之一: 方式一:从官网下载(推荐) # 在 hadoop01 节点上执行 cd /home/hadoop/app wget https://archive.apache.org/dist/spark/spark-2.3.1/spark-2.3.1-bin-hadoop2.7.tgz方…

OpenCV 风格迁移、DNN模块 案例解析及实现

图像风格迁移是计算机视觉领域极具趣味性的技术之一 —— 它能将普通照片&#xff08;内容图像&#xff09;与艺术画作&#xff08;风格图像&#xff09;的特征融合&#xff0c;生成兼具 “内容轮廓” 与 “艺术风格” 的新图像。OpenCV 的 DNN&#xff08;深度神经网络&#x…

MySQL 日志:undo log、redo log、binlog以及MVCC的介绍

一、MySQL 日志&#xff1a;undo log、redo log、binlogundo log&#xff08;回滚日志&#xff09;&#xff1a;是 Innodb 存储引擎层生成的日志&#xff0c;实现了事务中的原子性&#xff0c;主要用于事务回滚和 MVCC&#xff08;隔离性&#xff09;。 redo log&#xff08;重…

【面板数据】省及地级市农业新质生产力数据集(2002-2025年)

农业新质生产力是以科技创新为核心驱动力&#xff0c;以科技化、数字化、网络化和智能化为主线&#xff0c;通过技术革命性突破、生产要素创新性配置、产业深度转型升级&#xff0c;实现农业全要素生产率显著跃升的先进生产力形态 本数据基于2002-2025年各省政府工作报告中关于…

20250917在荣品RD-RK3588-MID开发板的Android13系统下使用tinyplay播放wav格式的音频

input keyevent 24 1|console:/sdcard # cat /proc/asound/cards console:/sdcard # ls -l /dev/snd/【需要打开Android13内置的音乐应用才会有声音出来&#xff0c;原因未知&#xff01;】 1|console:/sdcard # tinyplay /sdcard/Music/kiss8.wav -D 1 -d 020250917在荣品RD-R…

总共分为几种IP

IP&#xff08;Internet Protocol&#xff09;地址根据不同的分类标准可分为多种类型&#xff0c;以下是常见的分类方式&#xff1a;按版本分类IPv4&#xff1a;32位地址&#xff0c;格式为四组十进制数字&#xff08;如192.168.1.1&#xff09;&#xff0c;约43亿个地址&#…

【Linux】常用命令(六)

【Linux】常用命令&#xff08;六&#xff09;1. yum命令1.1 基本语法1.2 常用命令2. 从服务器把数据cp到本地3. uname命令3.1 常用命令1. yum命令 全称&#xff1a;Yellowdog Updater, Modified作用&#xff1a;是 RPM 包管理器的前端工具&#xff0c;用于基于 RPM 的 Linux …