Redis三種高可用模式的使用場景及特點的詳細介紹

Redis三種高可用模式的使用場景及特點的詳細介紹,結合不同業務需求提供選擇建議:

  1. 主從模式(Replication)
    核心能力:數據冗余備份、讀寫分離
    適用場景:

讀多寫少:例如內容發布平臺、新聞網站等,讀請求遠多于寫請求的場景。

數據備份需求:通過從節點異步復制主節點數據,提供數據冗余,防止單點數據丟失。

臨時性高可用:對自動故障轉移要求不高,可接受人工介入切換主節點的場景。

優點:

配置簡單,只需在從節點配置slaveof命令即可實現數據同步。

支持讀寫分離,提升讀性能。

局限性:

主節點單點故障:主節點宕機后需手動切換從節點為主節點,存在服務中斷風險。

數據同步延遲:異步復制可能導致從節點數據短暫不一致。

寫性能瓶頸:所有寫操作集中在主節點,無法水平擴展寫能力。
using StackExchange.Redis;

// 主節點連接
var masterConnection = ConnectionMultiplexer.Connect(“192.168.1.100:6379,allowAdmin=true”);
var masterDb = masterConnection.GetDatabase();
masterDb.StringSet(“key1”, “value1”); // 寫操作

// 從節點連接(配置為只讀)
var slaveConnection = ConnectionMultiplexer.Connect(“192.168.1.101:6379,allowAdmin=true,slave=true”);
var slaveDb = slaveConnection.GetDatabase();
var value = slaveDb.StringGet(“key1”); // 讀操作
Console.WriteLine($“Read from slave: {value}”);

// 手動切換從節點為主節點(需運維命令)
var server = slaveConnection.GetServer(“192.168.1.101:6379”);
server.SlaveOfNoOne(); // 提升從節點為主節點

  1. 哨兵模式(Sentinel)
    核心能力:自動故障轉移、監控與通知
    適用場景:

中小規模高可用需求:例如電商秒殺系統、在線支付網關等,需自動切換主節點以保障服務連續性。

讀寫分離優化:通過客戶端連接哨兵獲取主節點信息,實現透明切換,適合對寫性能要求不高的業務。

簡化運維:避免人工干預主從切換,提升系統可維護性。

優點:

自動檢測主節點故障并選舉新主節點,故障轉移時間通常為秒級。

客戶端通過哨兵動態獲取主節點地址,實現透明切換。

局限性:

寫性能瓶頸:主節點仍為單點,無法解決寫請求壓力大的問題。

數據一致性風險:故障轉移期間可能存在數據丟失或不一致。

部署復雜度:需至少部署3個哨兵節點以避免誤判,增加管理成本。

using StackExchange.Redis;

// 哨兵節點配置
var sentinelOptions = new ConfigurationOptions
{
EndPoints = { “192.168.1.200:26379”, “192.168.1.201:26379”, “192.168.1.202:26379” },
ServiceName = “mymaster”, // 哨兵監控的主節點名稱
TieBreaker = “”, // 禁用負載均衡
CommandMap = CommandMap.Sentinel
};

// 獲取當前主節點地址
var sentinelConnection = ConnectionMultiplexer.Connect(sentinelOptions);
var masterEndpoint = sentinelConnection.GetSentinelMasterEndpoint(sentinelOptions.ServiceName);

// 連接到主節點
var masterConnection = ConnectionMultiplexer.Connect($“{masterEndpoint},allowAdmin=true”);
var masterDb = masterConnection.GetDatabase();
masterDb.StringSet(“key2”, “value2”); // 寫操作

// 監聽主節點切換事件
sentinelConnection.GetSubscriber().Subscribe(“+switch-master”, (channel, message) =>
{
Console.WriteLine($“Master switched to: {message}”);
});

  1. 集群模式(Cluster)
    核心能力:數據分片、水平擴展、自動故障轉移
    適用場景:

大規模數據與高并發:例如社交平臺用戶畫像存儲、物聯網設備數據實時處理等,需高吞吐量和低延遲。

高可用與擴展性并重:每個分片(主節點)配備從節點,局部故障不影響整體服務。

動態擴容需求:支持在線添加節點并重新分配哈希槽,適合業務快速增長場景。

優點:

數據分片:通過16384個哈希槽將數據分散到多節點,支持水平擴展。

無單點故障:每個主節點有從節點冗余,故障時自動切換。

高并發處理:讀寫請求分散至不同節點,提升整體性能。

局限性:

事務限制:僅支持同一節點上的多鍵操作,跨節點事務需額外處理。

配置復雜:需管理分片邏輯、節點狀態及數據遷移,運維成本較高。

客戶端適配:需使用支持集群協議的客戶端(如Jedis Cluster)。

using StackExchange.Redis;

// 集群節點配置(至少3個主節點)
var clusterConnection = ConnectionMultiplexer.Connect(new ConfigurationOptions
{
EndPoints = {
“192.168.1.100:6379”,
“192.168.1.101:6379”,
“192.168.1.102:6379”
},
Password = “your_cluster_password”, // 集群密碼(若有)
AbortOnConnectFail = false,
ConnectRetry = 5
});

var clusterDb = clusterConnection.GetDatabase();

// 寫入數據(自動路由到對應分片)
clusterDb.StringSet(“user:1001”, “Alice”);
clusterDb.StringSet(“order:2001”, “Pending”);

// 讀取數據
var user = clusterDb.StringGet(“user:1001”);
Console.WriteLine($“User: {user}”);

// 跨節點操作(需使用哈希標簽確保同一分片)
clusterDb.StringSet(“{product}:sku123”, “Stock:10”); // 使用{}強制路由
clusterDb.StringIncrement(“{product}:sku123”);

綜合對比與選擇建議

在這里插入圖片描述

選擇建議:

主從模式:適合初期業務或測試環境,數據量小且對高可用要求不高。

哨兵模式:適合中小型生產環境,需自動容災但無需橫向擴展寫能力。

集群模式:適合大型分布式系統,需同時滿足高并發、高可用和彈性擴展。

實際應用案例
主從模式:內容緩存服務,如新聞網站的靜態數據緩存。

哨兵模式:電商訂單處理系統,通過讀寫分離降低主節點壓力。

集群模式:社交平臺用戶動態存儲,分片存儲海量數據并支持高并發訪問。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80873.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80873.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80873.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通俗易懂版知識點:Keepalived + LVS + Web + NFS 高可用集群到底是干什么的?

實驗開始前,先搞懂為什么要部署該集群? 這個方案的目標是讓網站 永不宕機,即使某臺服務器掛了,用戶也感覺不到。它主要涉及 負載均衡(LVS) 高可用(Keepalived) 共享存儲&#xff…

Qt中解決UI線程阻塞導致彈窗無法顯示的兩種方法

在Qt應用程序開發中,我們經常會遇到這樣的問題:當執行一個耗時操作時,整個界面會卡住,無法響應任何用戶操作,甚至連一個簡單的提示彈窗都無法正常顯示。本文將介紹兩種解決這個問題的方法,并通過完整的代碼示例進行說明。 問題描述 先來看一個常見的錯誤示例: #inclu…

2025年中國DevOps工具選型指南:主流平臺能力橫向對比

在數字化轉型縱深發展的2025年,中國企業的DevOps工具選型呈現多元化態勢。本文從技術架構、合規適配、生態整合三個維度,對Gitee、阿里云效(云效DevOps)、GitLab CE(中國版)三大主流平臺進行客觀對比分析&a…

isp流程介紹(yuv格式階段)

一、前言介紹 前面兩章里面,已經分別講解了在Raw和Rgb域里面,ISP的相關算法流程,從前面文章里面可以看到,在Raw和Rgb域里面,很多ISP算法操作,更像是屬于sensor矯正或者說sensor標定操作。本質上來說&#x…

虛幻引擎5-Unreal Engine筆記之UE編輯器退出時的保存彈框

虛幻引擎5-Unreal Engine筆記之UE編輯器退出時的保存彈框 code review! 文章目錄 虛幻引擎5-Unreal Engine筆記之UE編輯器退出時的保存彈框1. 退出編輯器時彈出的“Save Content”窗口2. File 菜單中的保存選項3. 區別總結 1. 退出編輯器時彈出的“Save Content”窗口 退出時…

如何判斷IP是否被平臺標記

一、基礎檢測:連通性與黑名單篩查 網絡連通性測試 Ping與Traceroute:通過命令測試延遲和路由路徑,若延遲>50ms或存在異常節點(如某跳延遲>200ms),可能影響可用性。示例命令: bash ping 8.…

零Gas授權實戰:用線下簽名玩轉智能合約 Permit 機制

目錄 鏈下簽名背景什么是 Permit ?鏈下簽名應用場景Permit 原理簡述實戰:從合約到前端完整實現安全注意事項總結鏈下簽名背景 在以太坊智能合約開發中,很多初學者經常面臨這樣一個問題:ERC20 代幣授權必須先調用鏈上合約的 approve(),再調用鏈上合約的 transferFrom(),每…

React 簡介:核心概念、組件化架構與聲明式編程

本文為《React Agent:從零開始構建 AI 智能體》專欄系列文章。 專欄地址:https://blog.csdn.net/suiyingy/category_12933485.html。項目地址:https://gitee.com/fgai/react-agent(含完整代碼示?例與實戰源)。完整介紹…

LeetCode100.7 接雨水

對于這題&#xff0c;有一個非常直觀簡潔的思路&#xff1a;水量等于柱子圍成的體積減去柱子的體積。 首先計算每一個高度的體積&#xff0c;相加即為總體積&#xff0c;減去sum(height)即為水的體積。 class Solution { public:int trap(vector<int>& height) {in…

NineData 社區版 V4.1.0 正式發布,新增 4 條遷移鏈路,本地化數據管理能力再升級

NineData 社區版 V4.1.0 正式更新發布。本次通過新增 4 條遷移鏈路擴展、國產數據庫深度適配、敏感數據保護增強?等升級&#xff0c;進一步鞏固了其作為高效、安全、易用的數據管理工具的定位。無論是開發測試、數據遷移&#xff0c;還是多環境的數據管理&#xff0c;NineData…

Go 語言 sqlx 庫使用:對 MySQL 增刪改查

MySQL 作為目前最流行的開源關系型數據庫&#xff0c;其 SQL 語法體系已形成行業標準&#xff0c;相關知識體系龐大且成熟&#xff0c;本文不再對 SQL 基礎進行詳細展開&#xff0c;建議尚未掌握的讀者先行系統學習。本文聚焦于如何使用 Go 語言進行 MySQL 數據庫操作&#xff…

單片機-STM32部分:13、PWM

飛書文檔https://x509p6c8to.feishu.cn/wiki/NjhuwbVP7iaEOikVK95cmJNLnWf PWM&#xff08;Pulse Width Modulation&#xff09;脈沖寬度調制&#xff0c;是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。它是把每一脈沖寬度均相等的脈沖列作為PWM波形&am…

抽獎系統-獎品-活動

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言獲取獎品列表前端頁面活動創建需求分析活動創建后端實現1-控制層實現及校驗活動活動創建后端實現2-保存信息活動插入活動獎品插入 整合活動信息存入redis測試活…

Dense 與 MoE 系列模型架構的全面對比與應用策略

0. 簡介 人工智能領域正經歷著一場架構革命&#xff0c;從傳統的密集連接模型&#xff08;Dense&#xff09;向混合專家模型&#xff08;Mixture of Experts, MoE&#xff09;的轉變。本文將全面剖析這兩種模型架構的本質差異、各自優勢與挑戰&#xff0c;并提供戰略性的選擇框…

代碼隨想錄算法訓練營第四十天

LeetCode題目: 647. 回文子串516. 最長回文子序列 其他: 今日總結 往期打卡 647. 回文子串 跳轉: 647. 回文子串 學習: 代碼隨想錄公開講解 問題: 給你一個字符串 s &#xff0c;請你統計并返回這個字符串中 回文子串 的數目。 回文字符串 是正著讀和倒過來讀一樣的字符串。…

Supabase 的入門詳細介紹

Supabase 是什么&#xff1f; 簡單來說&#xff0c;Supabase 是一個開源的 Firebase 替代品。它提供了一整套后端即服務 (BaaS - Backend as a Service) 的工具&#xff0c;讓你能夠快速構建應用程序的后端&#xff0c;而無需自己從頭搭建和管理服務器、數據庫等基礎設施。 S…

【MySQL】mysql/bin目錄下程序介紹

&#x1f525;個人主頁&#xff1a; 中草藥 &#x1f525;專欄&#xff1a;【MySQL】探秘&#xff1a;數據庫世界的瑞士軍刀 MySQL在安裝完成后&#xff0c;通常會包含以下程序&#xff0c;以Ubuntu上的mysql為例&#xff0c;我們可以查看到 以下是常用的mysql程序 程序名作用…

IDEA+git將分支合并到主分支、IDEA合并分支

文章目錄 一、合并分支二、可能遇到的問題2.1、代碼沖突 開發過程中我們可能在開發分支(dev)中進行開發&#xff0c;等上線后將代碼合并到主分支(master)中&#xff0c;本文講解如何在IDEA中將dev分支的代碼合并到master分支中。 一、合并分支 功能說明&#xff1a;將dev分支的…

通過Ollama讀取模型

通過Ollama讀取模型 前言一、查看本地Ollama上有哪些模型二、調用bge-m3模型1、調用模型2、使用bge-m3進行相似度比較 三、調用大模型 前言 手動下載和加載大模型通常需要復雜的環境配置&#xff0c;而使用Ollama可以避免這一問題。本文將介紹如何調用Ollama上的模型。 一、查…

JS 中 Object.keys() 和 Object.values() 的深度解析與應用

文章目錄 前言一、Object.keys() 和 Object.values() 基礎1. Object.keys()2. Object.values() 二、與 Object.entries() 的對比三、實際應用場景1. 遍歷對象屬性2. 判斷對象是否為空3. 對象與數組的轉換4. 動態屬性操作5. 過濾對象屬性 總結 前言 在 JavaScript 開發中&#…