首頁 後端開發 php教程 詳解Redis的主從同步

詳解Redis的主從同步

Dec 14, 2017 pm 02:38 PM
redis 同步

主從同步的字面意思就是以誰為主,以誰為副,同步進行,形成同步效應。那麼Redis的主從同步知識大家了解多少呢?本文主要介紹Redis的主從同步解析,僅供參考,希望能幫助大家。

一、Redis主從同步原理

1.1 Redis主從同步的過程

配置好slave伺服器連接的master後,slave會建立和master的連接,然後發送sync命令。無論是第一次同步建立的連接還是連接斷開後的重新連接,master都會啟動一個後台進程,將資料庫快照保存到文件中.同時master主程序會開始收集新的寫入命令並緩存起來。當後台程序完成寫入檔案後,master就會將快照檔案傳送給slave,slave將檔案儲存到磁碟上,然後載入到記憶體將資料庫快照還原到slave上。 slave完成快照檔案的恢復後,master就會把快取的指令都轉寄給slave,slave更新記憶體資料庫。後續master收到的寫入指令都會透過開始建立的連線傳送給slave。從master到slave的同步資料的命令和從 client到master發送的命令使用相同的協定格式。當master和slave的連線中斷時,slave可以自動重新建立連線。如果master同時收到多個slave發送的同步連線指令,只會使用啟動一個程序來寫入資料庫鏡像,然後傳送給所有slave。

1.2 Redis主從同步的特點

主從同步具有明顯的分散式快取特點,主要包括這些面向:

1)一個master可以有多個slave,一個slave也可以有多個slave;
2)slave不只可以連接到master,slave也可以連接其他slave形成樹狀結構;
3)主從同步不會阻塞master,但會阻塞slave。也就是說當一個或多個slave與master進行初次同步資料時,master可以繼續處理client發送的請求。相反slave在初次同步資料時則會阻塞不能處理client的請求;
4)主從同步可以用來提高系統的可擴展性,我們可以用多個slave專門處理client的讀取請求,也可以用來做簡單的資料冗餘或只在slave上進行持久化從而提升叢集的整體效能。

1.3 Redis主動同步設定方法

有兩種方式可以用來完成進行主從Redis伺服器的同步設定。都需要針對slave伺服器上進行,指定slave需要連接的Redis伺服器(可能是master,也可能是slave)。

1.3.1 在設定檔中設定

在設定為slave的Redis伺服器的設定檔(redis.conf)中設定。

Conf程式碼

slaveof 10.1.1.102 6379 #指定master的ip和端口
登入後複製

很明顯,這種設定方式非常簡單,但是需要修改設定文件,並且設定檔是在伺服器啟動時加載的。所以伺服器不啟動無法修改,操作不靈活。

這種配置方式適合於作為部署時的初始配置。

1.3.2 在Redis客戶端中進行設定

這裡以Redis官方推薦的Jedis為例來說明,後文中的測試也基於Jedis來進行。這裡jedis物件實例是屬於slave的,參數是伺服器的位址和連接埠。

Java程式碼

slaveJdedis.slaveOf("10.1.1.102", 6379); #指定master的ip和端口 
slaveJdedis.slaveofNoOne(); #取消指定master,自己成为一个master了
登入後複製

#透過客戶端指定的方式,可以方便的修改master和slave伺服器的主從關係。所以這種方式非常適合根據需要在線調整master和slave伺服器。

1.3.3 當前主從同步存在的問題

#由於master和slave伺服器的不是Redis自動選舉產生,需要人工參與,因此主從倒換無法自動完成。這樣就存在一個問題,什麼時候以及由誰來觸發倒換。我看了下客戶端是沒有這個能力的,一定要的話需要自己增加。

Jedis目前隨機選擇要讀取的哪一台Redis伺服器,因此實作自動分散式讀取我們需要對Jedis做二次封裝。

1)  需要發展一個機制,盡快偵測到master和slave的工作狀態;
2)  需要定義一個master和slave的自動切換策略;
3)  需要定義一個可以隨機讀取任何一台Redis伺服器的機制;

這些功能都可以在客戶端實現,不過效果不會太好。如果伺服器本身能夠支援就比較完美了,不過從Redis官網的介紹情況來看,好像目前還沒有看到有人提這樣的需求,也沒有這樣的規劃。

二、Redis主流用戶端介紹

在Redis的官方網站,列出了5款Redis的java用戶端軟體。其中Jedis是Redis官方推薦的java客戶端,這款一直有維護並更新。目前伺服器最新穩定版本是Redis2.4.17,最新的測試版本Redis 2.6.0 RC7。

2.1 Jedis

Jedis是Redis官方推薦的Java客戶端版本。目前最新為Jedis 2.1.0-5版本,完全相容於Redis 2.0.0版本。這個客戶端一直都有維護和更新。

2.2 JRedis

JRedis之前很長一段時間沒有更新,可以完全相容於Redis 2.0.0版本。今天5月前做過更新後可以相容於最新的Redis2.6.0測試版本。

2.3 JDBC-Redis

JDBC-Redis是用於Redis這個NoSQL資料庫的JDBC驅動程式。只能下載到2009年3月發布的jdbc-redis_0.1_beta版本,目前已經無人維修了。

2.4 RJC

RJC提供Apache DBCP風格的連接池。 1年前已經停止更新,可以完全相容於Redis 2.0.0版本。

2.5 redis-protocol

這個更新是最快、最頻繁的,可以相容於最新的Redis 2.6.0版本。不過它定位於完整支援Redis協議,更有效率和Redis伺服器進行資料互動。所以,並沒有充分發揮redis伺服器的功能。

2.6 各個Java客戶端整體評價

整體來講,各個客戶端基本上都實作了Redis協定協定定義的基本功能。 Redis-protocol更新最近對Redis協定的支援最完整;Jedis提供對Redis伺服器的更多設定操作,使用起來是最方便的。其他客戶端都很少維護,功能也是一般。

如果要少量擴充客戶端的功能,基於Jedis來做開發是最快捷的。

如果要最大限制相容和擴展客戶端的功能,基於Redis-protocol是最好的選擇。

三、Redis主從同步的使用建議

Redis主從同步在目前所有的Java客戶端都支援不好。主要原因應該還是Redis伺服器本身的實作機制限制所導致的。如果一定要做也是可能的,不過效果可能會打折扣。

3.1 透過封裝Jdedis來實現

1)新增一個管理類,負責維護Redis伺服器叢集的伺服器拓撲關係;
2)新增一個監測類,負責監測和維護Redis伺服器叢集中的伺服器運作狀態;
3)新增一個Master選擇策略類,負責確定master和slave的切換時機,並選擇最合適的Redis伺服器充當master。
4)新增一個代理類,接管目前的Jedis客戶端對Redis伺服器的讀寫操作。應用層透過代理類別來使用Jedis客戶端。代理類別需要確保Redis伺服器叢集對應用層透明。

相關推薦:

詳情Mysql主從同步設定範例程式碼

Mysql主從同步原理實現的詳情介紹(圖文)

linux下MySQL主從同步監控shell腳本

#

以上是詳解Redis的主從同步的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1250
24
redis集群模式怎麼搭建 redis集群模式怎麼搭建 Apr 10, 2025 pm 10:15 PM

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

redis數據怎麼清空 redis數據怎麼清空 Apr 10, 2025 pm 10:06 PM

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

redis怎麼讀取隊列 redis怎麼讀取隊列 Apr 10, 2025 pm 10:12 PM

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

centos redis如何配置Lua腳本執行時間 centos redis如何配置Lua腳本執行時間 Apr 14, 2025 pm 02:12 PM

在CentOS系統上,您可以通過修改Redis配置文件或使用Redis命令來限制Lua腳本的執行時間,從而防止惡意腳本佔用過多資源。方法一:修改Redis配置文件定位Redis配置文件:Redis配置文件通常位於/etc/redis/redis.conf。編輯配置文件:使用文本編輯器(例如vi或nano)打開配置文件:sudovi/etc/redis/redis.conf設置Lua腳本執行時間限制:在配置文件中添加或修改以下行,設置Lua腳本的最大執行時間(單位:毫秒)

redis命令行怎麼用 redis命令行怎麼用 Apr 10, 2025 pm 10:18 PM

使用 Redis 命令行工具 (redis-cli) 可通過以下步驟管理和操作 Redis:連接到服務器,指定地址和端口。使用命令名稱和參數向服務器發送命令。使用 HELP 命令查看特定命令的幫助信息。使用 QUIT 命令退出命令行工具。

redis計數器怎麼實現 redis計數器怎麼實現 Apr 10, 2025 pm 10:21 PM

Redis計數器是一種使用Redis鍵值對存儲來實現計數操作的機制,包含以下步驟:創建計數器鍵、增加計數、減少計數、重置計數和獲取計數。 Redis計數器的優勢包括速度快、高並發、持久性和簡單易用。它可用於用戶訪問計數、實時指標跟踪、遊戲分數和排名以及訂單處理計數等場景。

redis過期策略怎麼設置 redis過期策略怎麼設置 Apr 10, 2025 pm 10:03 PM

Redis數據過期策略有兩種:定期刪除:定期掃描刪除過期鍵,可通過 expired-time-cap-remove-count、expired-time-cap-remove-delay 參數設置。惰性刪除:僅在讀取或寫入鍵時檢查刪除過期鍵,可通過 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-user-del 參數設置。

如何優化debian readdir的性能 如何優化debian readdir的性能 Apr 13, 2025 am 08:48 AM

在Debian系統中,readdir系統調用用於讀取目錄內容。如果其性能表現不佳,可嘗試以下優化策略:精簡目錄文件數量:盡可能將大型目錄拆分成多個小型目錄,降低每次readdir調用處理的項目數量。啟用目錄內容緩存:構建緩存機制,定期或在目錄內容變更時更新緩存,減少對readdir的頻繁調用。內存緩存(如Memcached或Redis)或本地緩存(如文件或數據庫)均可考慮。採用高效數據結構:如果自行實現目錄遍歷,選擇更高效的數據結構(例如哈希表而非線性搜索)存儲和訪問目錄信

See all articles