色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Redis部分同步的實現

麥辣雞腿堡 ? 來源:七哥聊編程 ? 作者:七哥聊編程 ? 2023-10-09 15:15 ? 次閱讀
部分同步的實現

部分重同步功能由以下三個部分構成:

  • 主服務器的 復制偏移量 (replication offset)和從服務器的復制偏移量;
  • 主服務器的復制積壓緩沖區 (replication backlog);
  • 服務器的運行ID (run ID)。
復制偏移量

執行復制的雙方——主服務器和從服務器會分別維護一個復制偏移量:

  • 主服務器每次向從服務器傳播N個字節的數據時,就將自己的復制偏移量的值加上N;
  • 從服務器每次收到主服務器傳播來的N個字節的數據時,就將自己的復制偏移量的值加上N;

通過對比主從服務器的復制偏移量,程序可以很容易地知道主從服務器是否處于一致狀態:

  • 如果主從服務器處于一致狀態,那么主從服務器兩者的偏移量總是相同的;
  • 相反,如果主從服務器兩者的偏移量并不相同,那么說明主從服務器并未處于一致狀態。

如下面的情況:

圖片

假設從服務器A在斷線之后就立即重新連接主服務器,并且成功,那么接下來, 從服務器將向主服務器發送PSYNC命令,報告從服務器A當前的復制偏移量為10107 ,那么這時,主服務器應該對從服務器執行完整重同步還是部分重同步呢?如果執行部分重同步的話,主服務器又如何補償從服務器A在斷線期間丟失的那部分數據呢?以上問題的答案都和復制積壓緩沖區有關。

復制積壓緩沖區

復制積壓緩沖區是由主服務器維護的一個固定長度(fixed-size)先進先出(FIFO)隊列,默認大小為1MB。

和普通先進先出隊列隨著元素的增加和減少而動態調整長度不同,固定長度先進先出隊列的長度是固定的,當入隊元素的數量大于隊列長度時,最先入隊的元素會被彈出,而新元素會被放入隊列。

當主服務器進行命令傳播時,它不僅會將寫命令發送給所有從服務器,還會將寫命令入隊到復制積壓緩沖區里面,如圖所示。

圖片

因此,主服務器的復制積壓緩沖區里面會保存著一部分最近傳播的寫命令,并且復制積壓緩沖區會為隊列中的每個字節記錄相應的復制偏移量,就像下表所示的那樣:

圖片

當從服務器重新連上主服務器時,從服務器會通過PSYNC命令將自己的復制偏移量offset發送給主服務器,主服務器會根據這個復制偏移量來決定對從服務器執行何種同步操作:

  • 如果offset偏移量之后的數據(也即是偏移量offset+1開始的數據)仍然存在于復制積壓緩沖區里面,那么主服務器將對從服務器執行部分重同步操作;
  • 相反,如果offset偏移量之后的數據已經不存在于復制積壓緩沖區,那么主服務器將對從服務器執行完整重同步操作。
根據需要調整復制積壓緩沖區的大小

Redis為復制積壓緩沖區設置的默認大小為1MB,如果主服務器需要執行大量寫命令,又或者主從服務器斷線后重連接所需的時間比較長,那么這個大小也許并不合適。如果復制積壓緩沖區的大小設置得不恰當,那么PSYNC命令的復制重同步模式就不能正常發揮作用,因此,正確估算和設置復制積壓緩沖區的大小非常重要。

復制積壓緩沖區的最小大小可以根據公式 second * write_size_per_second來估算:

  • 其中second為從服務器斷線后重新連接上主服務器所需的平均時間(以秒計算);
  • 而write_size_per_second則是主服務器平均每秒產生的寫命令數據量(協議格式(RESP協議)的寫命令的長度總和);

例如,如果主服務器平均每秒產生 1MB 的寫數據,而從服務器斷線之后平均要5秒才能重新連接上主服務器,那么復制積壓緩沖區的大小就不能低于5MB。

為了安全起見,可以將 復制積壓緩沖區的大小 = 2 * second * write_size_per_second,這樣可以保證絕大部分斷線情況都能用部分同步來處理。

至于復制積壓緩沖區大小的修改方法,可以參考配置文件中關于 repl-backlog-size 選項的說明。

服務器運行ID

除了復制偏移量和復制積壓緩沖區之外,實現部分重同步還需要用到服務器運行ID(run ID):

  • 每個Redis服務器,不論主服務器還是從服務,都會有自己的運行ID;
  • 運行ID在服務器啟動時自動生成,由40個隨機的十六進制字符組成,例如 53b9b28df8042fdc9ab5e3fcbbbabff1d5dce2b3

當從服務器對主服務器進行初次復制時,主服務器會將自己的運行ID傳送給從服務器,而從服務器則會將這個運行ID保存起來(注意哦,是從服務器保存了主服務器的ID)。

當從服務器斷線并重新連上一個主服務器時,從服務器將向當前連接的主服務器發送之前保存的運行ID:

  • 如果從服務器保存的運行ID和當前連接的主服務器的運行ID相同,那么說明從服務器斷線之前復制的就是當前連接的這個主服務器,主服務器可以繼續嘗試執行部分重同步操作;
  • 相反地,如果從服務器保存的運行ID和當前連接的主服務器的運行ID并不相同,那么說明從服務器斷線之前復制的主服務器并不是當前連接的這個主服務器,主服務器將對從服務器執行完整重同步操作。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7006

    瀏覽量

    88955
  • 服務器
    +關注

    關注

    12

    文章

    9129

    瀏覽量

    85348
  • 數據庫
    +關注

    關注

    7

    文章

    3795

    瀏覽量

    64366
  • Redis
    +關注

    關注

    0

    文章

    374

    瀏覽量

    10871
收藏 人收藏

    評論

    相關推薦

    Redis Stream應用案例

    Contributor,設計并實現了阿里云Redis開源項目ApsaraCache的部分核心feature,如時間點恢復,binlog同步等。原文鏈接
    發表于 06-26 17:15

    Redis Cluster的基本原理及實現細節

    Redis Cluster的基本原理和架構 Redis Cluster是分布式Redis實現。隨著Redis版本的更替,以及各種已知bug
    發表于 09-28 19:09 ?0次下載
    <b class='flag-5'>Redis</b> Cluster的基本原理及<b class='flag-5'>實現</b>細節

    Redis基本類型和底層實現

    簡單介紹了Redis的五種對象類型和它們的底層實現。事實上,Redis的高效性和靈活性正是得益于對于同一個對象類型采取不同的底層結構,并在必要的時候對二者進行轉換;以及各種底層結構對內存的合理利用。
    發表于 11-25 15:11 ?4484次閱讀
    <b class='flag-5'>Redis</b>基本類型和底層<b class='flag-5'>實現</b>

    Redis為什么這么快!深入了解Redis的內存模型!

    Redis是目前最火爆的內存數據庫之一,通過在內存中讀寫數據,大大提高了讀寫速度,可以說Redis實現網站高并發不可或缺的一部分
    的頭像 發表于 05-02 16:57 ?4402次閱讀
    <b class='flag-5'>Redis</b>為什么這么快!深入了解<b class='flag-5'>Redis</b>的內存模型!

    Springboot+redis操作多種實現

    一、Jedis,Redisson,Lettuce三者的區別共同點:都提供了基于Redis操作的Java API,只是封裝程度,具體實現稍有不同。 不同點: 1.1、Jedis 是Redis的Java
    的頭像 發表于 09-22 10:48 ?1825次閱讀
    Springboot+<b class='flag-5'>redis</b>操作多種<b class='flag-5'>實現</b>

    redis設計與實現

    redis
    發表于 06-20 14:44 ?0次下載

    談談Redis怎樣配置實現主從復制?

    之前總結過redis的持久化機制:深度剖析Redis持久化機制,持久化機制主要解決redis數據單機備份問題;redis的高可用需要考慮數據的多機備份,多機備份通過主從復制來
    發表于 01-31 11:31 ?666次閱讀

    Redis實現限流的三種方式分享

    當然,限流有許多種實現的方式,Redis具有很強大的功能,我用Redis實踐了三種的實現方式,可以較為簡單的實現其方式。
    的頭像 發表于 02-22 09:52 ?1076次閱讀

    Redis數據同步解決方案—NineData

    NineData(https://www.ninedata.cloud/)在Redis同步上,提供了穩定和高效的解決方案,并且性能上也領先其他同步工具,特別是在同步的動態限流、數據對
    的頭像 發表于 06-05 15:31 ?823次閱讀
    <b class='flag-5'>Redis</b>數據<b class='flag-5'>同步</b>解決方案—NineData

    redis分布式鎖如何實現

    Redis分布式鎖是一種基于Redis實現的機制,可以用于多個進程或多臺服務器之間對共享資源的并發訪問控制。在分布式系統中,由于多個進程或多臺服務器同時訪問共享資源,可能會發生數據競爭和資源沖突
    的頭像 發表于 11-16 11:29 ?527次閱讀

    Redis工具集的實現和使用

    Redis 基本上是互聯網公司必備的工具了,Redis的應用場景實在太多了,但是有很多相似的功能如果每個項目都要實現一遍就顯得太麻煩了,所以為了方便,我打算開發一個基于 Redis
    的頭像 發表于 12-03 17:32 ?1230次閱讀
    <b class='flag-5'>Redis</b>工具集的<b class='flag-5'>實現</b>和使用

    Java redis鎖怎么實現

    在Java中實現Redis鎖涉及到以下幾個方面:Redis的安裝配置、Redis連接池的使用、Redis數據結構的選擇、
    的頭像 發表于 12-04 10:47 ?1159次閱讀

    如何實現Redis分布式鎖

    機制,下面將詳細介紹如何實現Redis分布式鎖。 一、引言 在分布式系統中,多個節點可能同時讀寫同一共享資源。如果沒有實現互斥訪問和同步機制,就會產生數據不一致和競態條件等問題。解決這
    的頭像 發表于 12-04 11:24 ?702次閱讀

    redis hash底層實現原理

    數據結構是如何實現的呢?本文將詳細介紹Redis哈希底層的實現原理。 在Redis中,每個哈希都是由一個類似于字典(Dictionary)的結構實現
    的頭像 發表于 12-04 16:27 ?581次閱讀

    redis數據結構的底層實現

    Redis是一種內存鍵值數據庫,常用于緩存、消息隊列、實時數據分析等場景。它的高性能得益于其精心設計的數據結構和底層實現。本文將詳細介紹Redis常用的數據結構和它們的底層實現
    的頭像 發表于 12-05 10:14 ?617次閱讀
    主站蜘蛛池模板: 精品久久久久久综合网| 做暖免费观看日本| 三级中国免费的| 免费乱理伦片在线观看夜| 久久精品视频免费| 极品少妇高潮啪啪AV无码吴梦梦| 国产精品97久久AV色婷婷| 岛国片免费看| 高清一区二区亚洲欧美日韩| 超碰在线视频人人AV| 第一次处破女高清电影| 成人永久免费视频| 东京热影院| 国产av久久免费观看| 国产精品99久久久精品无码| 国产精品18久久久久网站| 国产午夜精品理论片影院| 国产色精品久久人妻无码看片| 国产亚洲AV无码成人网站| 后入式狂顶免费视频| 教室眠催白丝美女校花| 久久妇女高潮几次MBA| 久久精品黄AA片一区二区三区| 久久青草免费线观最新| 毛片免费观看的视频在线| 免费精品国产日韩热久久| 日本高清天码一区在线播放| 色就色综合| 亚洲大爷操| 有码在线播放| 99视频在线免费看| 富婆夜店找黑人猛男BD在线| 国产精品亚洲污污网站入口| 茎身铃口调教| 美女的让男人桶爽网站| 人人爽久久久噜噜噜丁香AV| 午夜伦理一yy4480影院| 伊人久久精品午夜| yellow免费观看在线| 国产乱色伦影片在线观看| 九九夜夜妹子|