一、Redis 支援三種主要的叢集模式
-
主從複製模式(Master-Slave Replication):
- 在這種模式下,主節點(Master)負責處理寫入操作,而從節點(Slave)則是主節點的副本,用於處理讀取操作和提供資料冗餘。這種模式透過複製主節點的資料到多個從節點來提高資料的可用性和讀取效能。當主節點發生故障時,可以從從節點中選舉一個新的主節點,以此來實現高可用性。
-
哨兵模式(Sentinel):
- 哨兵模式是在主從複製模式的基礎上增加了自動故障轉移的功能。哨兵節點(Sentinel)監控主節點和從節點的狀態,當主節點出現故障時,哨兵會自動將一個從節點升級為新的主節點,並通知其他從節點和客戶端新的主節點地址,以此來保證Redis服務的高可用性。
-
叢集模式(Cluster):
- Redis叢集模式透過資料分片(sharding)來實現分散式儲存。叢集中的每個節點負責一部分資料(即一部分雜湊槽),並且每個主節點可以有一個或多個從節點。叢集模式不僅支援資料的自動分割槽,還支援主從複製和故障轉移,從而實現了高可用性和可擴充套件性。
這三種模式各有特點和適用場景,可以根據業務需求和系統架構來選擇合適的叢集模式。主從複製模式和哨兵模式主要用於提高資料的可用性和讀取效能,而叢集模式則更適合於需要橫向擴充套件和處理大量資料的場景。
二、Redis叢集常用運維指令
Redis叢集模式下的運維指令主要用於叢集的搭建、管理、監控和維護。以下是一些常用的Redis叢集運維指令:
-
建立叢集:
redis-cli --cluster create host1:port1 host2:port2 ... hostN:portN --cluster-replicas N
這個命令用於建立一個新的Redis叢集,其中
host1:port1 ... hostN:portN
是叢集節點的地址和埠,--cluster-replicas N
指定了每個主節點的從節點數量。 -
檢查叢集狀態:
redis-cli --cluster check host:port
這個命令用於檢查指定Redis叢集節點的狀態。
-
獲取叢集資訊:
redis-cli --cluster info host:port
這個命令用於獲取叢集的相關資訊,如叢集狀態、節點資訊等。
-
新增節點到叢集:
redis-cli --cluster add-node new_host:new_port existing_host:existing_port node_id
這個命令用於將新節點新增到現有的叢集中。
new_host:new_port
是新節點的地址和埠,existing_host:existing_port
是現有叢集中任意節點的地址和埠,node_id
是現有節點的ID。 -
刪除節點從叢集:
redis-cli --cluster del-node host:port node_id
這個命令用於從叢集中刪除指定的節點。
host:port
是執行命令的節點地址和埠,node_id
是要刪除的節點ID。 -
重新分配槽位:
redis-cli --cluster reshard host:port --cluster-from node_id --cluster-to new_node_id --cluster-slots num_slots
這個命令用於在叢集中重新分配槽位。
--cluster-from
指定源節點ID,--cluster-to
指定目標節點ID,--cluster-slots
指定要遷移的槽位數量。 -
叢集重平衡:
redis-cli --cluster rebalance host:port --cluster-weight node1=w1 ... nodeN=wN
這個命令用於根據指定的權重對叢集節點的槽位進行重平衡。
-
設定節點超時時間:
redis-cli --cluster set-timeout host:port milliseconds
這個命令用於設定叢集節點的超時時間。
-
匯入外部Redis資料到叢集:
redis-cli --cluster import host:port --cluster-from host:port
這個命令用於將外部Redis例項的資料匯入到叢集中。
-
執行叢集操作:
redis-cli --cluster call host:port command arg1 arg2 ...
這個命令用於在叢集的所有節點上執行指定的命令。
Redis 支援多種資料結構,每種資料結構都有其特定的使用場景和優勢。以下是 Redis 的主要資料結構及其適用場景:
-
字串(String):
- 適用場景:字串是最基本的型別,可以儲存任何形式的資料,比如文字、數字、JSON 等。常用於快取功能,如快取使用者的會話資訊、儲存配置引數、計數器等。
-
列表(List):
- 適用場景:列表是一個有序的字串集合,可以實現棧(先進後出)或佇列(先進先出)的功能。適用於訊息佇列、最新列表(如微博動態)、排行榜等場景。
-
集合(Set):
- 適用場景:集合是一個無序且元素唯一的集合。適用於儲存不重複的資料集、實現共同好友功能、標籤系統、釋出/訂閱模型等。
-
有序集合(Sorted Set):
- 適用場景:有序集合中的每個元素都關聯一個分數(score),元素按分數有序排列。適用於排行榜、範圍查詢(如獲取排名前 10 的使用者)、計分板等。
-
雜湊表(Hash):
- 適用場景:雜湊表是一個鍵值對集合,適合儲存物件。適用於儲存使用者資訊、快取網站物件、儲存多個相關欄位的資料等。
-
點陣圖(Bitmap):
- 適用場景:點陣圖是字串的特例,通常用於表示大量的布林值。適用於統計活躍使用者、許可權控制、狀態標記等。
-
超日誌(HyperLogLog):
- 適用場景:超日誌是一種機率資料結構,用於高效地估算集合中唯一元素的數量(基數)。適用於統計網站訪問獨立IP數、分析大集合的基數等。
-
地理空間(Geo):
- 適用場景:地理空間資料結構用於儲存地理位置資訊,並能夠執行地理位置查詢。適用於地理位置索引、附近位置查詢、位置跟蹤等。
-
流(Stream):
- 適用場景:流資料結構是 Redis 5.0 版本引入的,適用於構建訊息佇列、實現時間序列資料模型、提供持久化訊息佇列功能等。
每種資料結構都有其特定的命令集來操作,可以根據實際業務需求選擇合適的資料結構來最佳化效能和儲存效率。在實際應用中,有時候也會將多種資料結構組合使用,以滿足更復雜的業務邏輯。