Redis主從同步

一、Redis主從同步缺點

Redis主從同步是將master的數據異步地複製到slave,從而達到數據冗餘和負載均衡的目的。但是,Redis主從同步也有一些缺點:

1、主從同步是異步的,可能存在數據不一致的情況。

2、主從同步對於master的性能影響比較大,如果master持續寫入,就可能導致slave延遲增加;如果slave數量增加,也會對master的寫性能產生影響。

3、主從同步依賴於網絡,如果網絡不穩定,可能導致主從同步失敗。

二、Redis主從同步失敗

Redis主從同步雖然很實用,但是仍有可能出現同步失敗的情況。可能的原因有:

1、Master宕機。在Redis主從同步中,Master負責向Slave發送數據,如果Master宕機,就無法發送數據,Slave也就無法同步數據。

2、Master與Slave之間的網絡連接出現問題。如果網絡中斷,將防止Slave向Master發送請求或接收響應。

3、Slave宕機或重啟。如果Slave停機或重啟,將無法接收並同步來自Master的更新。

三、分布式鎖

Redis主從同步是一個典型的分布式場景,因此很容易受到分布式鎖的影響。在Redis主從同步過程中,可能會出現多個Slave節點同時請求同步的問題,可能會導致死鎖。

解決辦法是,使用分布式鎖來控制同步請求,保證只有一個Slave節點進行同步。Redis中可以採用SETNX命令實現分布式鎖,對於獲取鎖的Slave節點,可以設置一個過期時間,確保鎖的釋放。

    
    bool get_lock(redisContext *ctx, const char *key, int ttl) {
        //SETNX命令返回1表示成功獲取到鎖
        redisReply *reply = (redisReply *)redisCommand(ctx, "SETNX %s 1", key);
        if (!reply) {
            return false;
        }
        bool success = (reply->type == REDIS_REPLY_INTEGER && reply->integer == 1);
        freeReplyObject(reply);
        if (success) {
            //設置過期時間,保證鎖的釋放
            reply = (redisReply *)redisCommand(ctx, "EXPIRE %s %d", key, ttl);
            if (!reply) {
                return false;
            }
            success = (reply->type == REDIS_REPLY_INTEGER && reply->integer == 1);
            freeReplyObject(reply);
        }
        return success;
    }
    

四、Redis主從同步原理

Redis主從同步是通過異步複製實現的,即Master節點將自己的狀態改變記錄到複製積壓緩衝區中,然後發送給所有Slave節點。Slave節點將Master發送過來的命令以相同的順序執行,這樣就可以使Slave節點達到與Master節點一致的狀態。

當Master節點處理完每個命令後,會將命令的結果發送給所有Slave節點,Slave節點會根據自己的狀態轉換信息修改自己的狀態。當Slave節點收到命令時,必須以先進先出的順序處理命令。

五、Redis主從同步長連接

Redis主從同步的TCP長連接可以提供更快的同步速度。當Slave與Master建立TCP連接時,會一直保持連接狀態,這樣就可以減少TCP協議建立和斷開的開銷,提高數據同步效率。但是,長連接也可能會導致網絡擁堵或者負載過高。

    
    #Slave配置文件中開啟TCP長連接
    replica-keep-size 1
    replica-serve-stale-data yes
    replica-read-only yes
    replica-ignore-max-connections yes
    

六、Redis主從同步的場景

Redis主從同步適用於數據同步和數據冗餘場景。Redis主從同步可以保證高可用性,即使Master節點發生故障,也可以通過Slave節點提供服務,保證系統的可用性。此外,Redis主從同步還可以提高系統的數據安全性,因為可以將數據複製到多個節點,即使某一節點發生故障,也可以從其他節點恢複數據。

七、Redis主從模式和哨兵模式

Redis主從模式僅限於單Master節點場景下的多Slave節點,無法應對Master節點宕機等故障。因此,Redis還提供了哨兵模式。哨兵模式通過監控Redis節點的狀態,可以自動發現故障並進行切換。哨兵模式的主要作用是提供高可用性,自動切換Master節點。

八、Redis數據同步

Redis默認情況下採用異步複製技術進行數據同步,這可能導致相應速度慢或延遲高。在需要快速同步數據的場景下,可以採用一些特定技術,提高數據同步速度。例如,在數據量較大的情況下,可以使用RDB文件進行數據轉儲,在Slave節點上還原數據。

九、Redis主從同步過程

Redis主從同步過程分為同步初始化和正常同步兩個部分。

  • 同步初始化:Slave節點向Master節點發送SYNC命令,Master節點返回2個信息偏移量off和積壓緩衝區的內存二進制文件
  • 正常同步:Slave節點啟動一個RDB持久化進程,開始發送請求和接收Master節點的響應。一旦Slave節點接收到Master節點的回復,就將它存儲在自己的複製積壓緩衝區中。當積壓緩衝區填滿時,Slave節點開始應用緩衝區中的命令。

十、Redis主從同步失敗

Redis主從同步可能會失敗,如果遇到這種情況,可以考慮以下解決方法:

1、檢查Master節點是否正常運行

2、檢查網絡連接是否正常

3、檢查Slave節點是否存在故障,並進行相應的處理

十一、Redis主從同步數據選取

Redis主從同步可以將Master節點的所有數據複製到Slave節點。但是,如果數據量很大,這可能會導致網絡擁堵和數據延遲等問題。因此,可以按需選擇同步數據,只將必要的數據同步到Slave節點。

    
    #選擇同步鍵為test:*的數據
    replica-read-only yes
    replica-ignore-max-connections yes
    replica-pattern test:*
    

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/300726.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-29 12:52
下一篇 2024-12-29 12:52

相關推薦

  • 在CentOS上安裝Redis

    Redis是一款非關係型數據庫,它支持多種數據結構,包括字符串、哈希、列表、集合、有序集合等。Redis運行內存內並且支持數據持久化,它還可以應用於緩存、消息隊列等場景。本文將介紹…

    編程 2025-04-28
  • 解析spring.redis.cluster.max-redirects參數

    本文將圍繞spring.redis.cluster.max-redirects參數進行詳細闡述,從多個方面解讀它的意義與作用,並給出相應的代碼示例。 一、基礎概念 在介紹sprin…

    編程 2025-04-27
  • Redis Bitmap用法介紹

    Redis是一款高性能的內存數據庫,支持多種數據類型,其中之一便是bitmap。Redis bitmap(位圖)是一種用二進制位來表示元素是否在集合中的數據結構。由於使用了二進制位…

    編程 2025-04-27
  • 使用yum安裝redis

    一、什麼是redis? Redis是一種開源的基於key-value存儲的NoSQL數據庫,它支持多種數據結構的存儲,例如字符串、哈希、列表、集合以及有序集合等。同時,Redis還…

    編程 2025-04-25
  • Linux Redis 重啟

    一、概述 Redis 是一款高性能的 NoSQL 數據庫,常用於各種應用場景的數據緩存、消息隊列、實時數據分析等等。在使用 Redis 過程中,如果出現了某些問題,有時候只需要重啟…

    編程 2025-04-25
  • Ubuntu安裝Redis指南

    一、安裝步驟 1、查看Ubuntu是否已安裝Redis,如果已安裝,則卸載Redis。 sudo apt-get remove redis-server 2、安裝Redis——命令…

    編程 2025-04-25
  • Redis MSET完全指南

    一、MSET簡介 Redis是一個高性能的開源緩存軟件,被稱作NoSQL數據庫。其中,MSET是Redis中的一種命令,可以同時設置多個Key-Value對。如果KeyValue已…

    編程 2025-04-25
  • 深入解析Redis內存淘汰策略

    Redis是一個高性能鍵值數據庫,由於其快速、穩定和易於使用,它已經成為很多應用程序中不可或缺的一部分。在使用Redis時,我們需要考慮內存管理問題。Redis內存淘汰策略是如何工…

    編程 2025-04-25
  • Redis樂觀鎖詳解

    一、樂觀鎖概述 樂觀鎖是一種並發控制機制,它假定在數據變更時不會有衝突發生,因此不會像悲觀鎖一樣在操作時先加鎖。 在Redis中,樂觀鎖常用於多線程、多用戶同時操作同一個數據的場景…

    編程 2025-04-25
  • Redis的作用

    一、緩存 Redis最常見的用途是作為緩存。所謂緩存,就是將頻繁讀取、但不經常修改的數據存儲在內存中,用戶請求數據時優先從內存中讀取,可大幅提升數據訪問效率。Redis的數據結構特…

    編程 2025-04-24

發表回復

登錄後才能評論