1. 程式人生 > 實用技巧 >web開發之資料庫技術

web開發之資料庫技術

1.什麼是Redis Cluster

1.Redis叢集是一個可以在多個Redis節點之間進行資料共享的設施(installation)
2.Redis叢集不支援那些需要同時處理多個鍵的Redis命令,因為執行這些命令需要在多個Redis節點之間移動資料,並且在高負載的情況下,這些命令將降低Redis叢集的效能,並導致不可預測的行為。(使用ack協議)
3.Redis叢集通過分割槽(partition)來提供一定程度的可用性(availability):即使叢集中有一部分節點失效或者無法進行通訊,叢集也可以繼續處理命令請求。
4.Redis叢集有將資料自動切分(split)到多個節點的能力。

2.Redis Cluster的特點

# 高效能:
1.在多分片節點中,將16384個槽位,均勻分佈到多個分片節點中
2.存資料時,將key做crc16(key),然後和16384進行取模,得出槽位值(0-16384之間)
3.根據計算得出的槽位值,找到相對應的分片節點的主節點,儲存到相應槽位上
4.如果客戶端當時連線的節點不是將來要儲存的分片節點,分片叢集會將客戶端連線切換至真正儲存節點進行資料儲存
5.客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可
6.Redis Cluster解決了redis資源利用率的問題

# 高可用
7.在搭建叢集時,會為每一個分片的主節點,對應一個從節點,實現slaveof功能,同時當主節點down,實現類似於sentinel的自動failover的功能。

3.槽的概念

1.在叢集中,會把所有節點分為16384個槽位
2.槽位的序號是 0 - 16383,序號不重要,數量才重要
3.每一個槽位分配到資料的概率是一樣

4.redis故障轉移

1.在叢集裡面,節點會對其他節點進行下線檢測。
2.當一個主節點下線時,叢集裡面的其他主節點負責對下線主節點進行故障移。
3.換句話說,叢集的節點集成了下線檢測和故障轉移等類似 Sentinel 的功能。