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
英文地址,請注明出處:http://en.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 …