redis集群的三種方式是什麼
Redis三種叢集方式:主從複製,哨兵模式,Cluster叢集。
主從複製
#基本原理
#當新建立一個從伺服器時,從伺服器將向主伺服器發送SYNC指令,接收到SYNC指令後的主伺服器會進行一次BGSAVE指令,在執行期間,會將所有指令寫入緩衝區中,當BGSAVE指令執行完畢之後會將產生的RDB檔案傳送給從伺服器,從伺服器使用這個文件載入資料到記憶體中,之後主伺服器會以Redis命令協定的格式將緩衝區的命令傳送給從伺服器。此後每次主服務執行指令都會同步給從伺服器。即使有多個從伺服器傳送SYNC指令,主伺服器只會執行一個BGSAVE指令,就可以處理接下來的同步要求。一個主伺服器可以擁有多個從伺服器,而從伺服器也可擁有從伺服器,從而形成一個圖狀結構,複製功能不會阻塞主伺服器,即使有一個或多個同步請求,主伺服器依然能處理命令請求。
持久化開關
當配置了主從複製模式時需要開啟主伺服器的持久化功能,如果將主伺服器的持久化功能關閉,主伺服器一旦重啟,所有從伺服器的資料將會遺失,即使配置了Sentinel模式,如果主伺服器自動拉起程序比較快,以至於在Sentinel模式下還未選出新的主伺服器,主服務的啟動也會造成子伺服器的資料遺失。
設定
設定一個主從複製模式,只需要使用Slaveof指令即可,在conf設定檔中新增或是在redis中執行指令。
SLAVEOF host port
哨兵模式
基本原則
Redis的Sentinel系統用於管理多個Redis,主要執行以下三件事:
監控:Sentinel會不斷的檢查主從伺服器運行狀態
提醒:當某個Redis伺服器發生故障,可透過API或其他應用程式發送通知
自動故障遷移:當一個主伺服器無法正常運作時,Sentinel會進行一次故障自動遷移,會將失效主伺服器的從伺服器選出一個新的主伺服器,剩下的從伺服器會自動連線複製選舉出來的新伺服器的數據。
Redis的Sentinel系統是一個分散式的系統,可以在系統中設定一個或多個Sentinel。
啟動
使用redis-sentinel啟動
redis-sentinel sentinel.confy
也可以使用redis-server來啟動
redis-server sentinel.conf --sentinelyy
以上兩種方式都可以啟動sentinel,啟動sentinel必須指定設定文件,否則無法啟動:
設定
一個sentinel.conf檔案最少需要一句設定:
sentinel monitor mymaster 127.0.0.1 6379 2
監視一個別名為做mymaster的主機,位址是127.0.0.1,連接埠是6379,將這個主伺服器判斷為失效至少需要2個sentinel同意。
無論設定多少個sentinel同意判斷一個主伺服器的失效,都需要係統中多個Sentinel支援才能進行故障遷移,而只有少數sentinel正常運作的時候,是無法進行故障遷移。
故障遷移
當一個Sentinel發現主伺服器下線時,稱為主觀下線,只有多個Sentinel都發現主服務下線,並且相互之間透過指令進行交流判斷主伺服器下線時,稱為客觀下線。只有對主伺服器進行客觀下線時,會選出領頭Sentinel,選出之後,會進行新的主伺服器投票選舉,選出一個從伺服器升級為主伺服器。並向被選中的從伺服器發送Slaveof no one命令,讓其變為主伺服器,透過發布訂閱的功能,將新的配置廣播給其他Sentinel進行更新,並向下線路的主伺服器發送Slaveof命令,讓其複製新的主伺服器,當所有從伺服器都已經開始複製新的主伺服器時,領頭Sentinel終止本次故障遷移。
當一個Redis 實例被重新配置是,無論是被設定成主伺服器、從伺服器、又或被設定成其他主伺服器的從伺服器,Sentinel 都會傳送一個
CONFIG REWRITE
指令, 從而確保這些設定會持久化在硬碟裡。
Cluster叢集
之前的主从复制,哨兵模式都难以再现扩容,而Redis cluster集群实现了对Redis的水平扩容,即启动N个Redis节点,每个节点又可以有自己的从服务器,将数据均匀分布的存储在这N个结点上,每个节点存储数据的1/N。Redis cluster集群就是一个可以在多个Redis节点之间进行数据共享的设施;Redis cluster集群采用的是无中心化配置,即节点A无法处理,会将请求转发只节点B进行处理。
键分布模型
Redis集群中的键空间被分割为16384个槽位。Redis采用CRC16算法对16384个槽位进行分配,每个主节点负责其中一部分。为了保证高可用,cluster模式也引入了主从复制模式,一个主节点对应一个或多个从节点,当主节点发生宕机时,可进行故障转移,将子节点升级为主节点。
配置cluster集群
Redis 集群由多个运行在集群模式(cluster mode)下的 Redis 实例组成, 实例的集群模式需要通过配置来开启,以下是一个包含了最少选项的集群配置文件示例:
port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
cluster-enabled:打开集群模式
cluster-config-file:节点配置文件名,无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新
cluster-node-timeout:节点失联时间,当超过此毫秒,集群将自动切换主从节点。
要让集群正常运作至少需要三个主节点,而每个主节点都应该正确配置一个或者多个从节点。
启动集群
使用redis-cli --cluster create命令将节点合并成一个集群
redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
--cluster-replicas 1 这个指的是从机的数量,表示我们希望为集群中的每个主节点创建一个从节点。
进入集群模式只需要使用redis-cli -c命令
redis-cli -c -p 7000
无中心话节点,所以进入任意一个端口号的主节点即可。
以上是redis集群的三種方式是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

理解 Redis 源碼的最佳方法是逐步進行:熟悉 Redis 基礎知識。選擇一個特定的模塊或功能作為起點。從模塊或功能的入口點開始,逐行查看代碼。通過函數調用鏈查看代碼。熟悉 Redis 使用的底層數據結構。識別 Redis 使用的算法。

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

Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

使用Redis進行鎖操作需要通過SETNX命令獲取鎖,然後使用EXPIRE命令設置過期時間。具體步驟為:(1) 使用SETNX命令嘗試設置一個鍵值對;(2) 使用EXPIRE命令為鎖設置過期時間;(3) 當不再需要鎖時,使用DEL命令刪除該鎖。
