Redis 3.0介紹及叢集說明

liupzmin發表於2015-10-20

Redis是一個開源、基於C語言、基於記憶體亦可持久化的高效能NoSQL資料庫,同時,它還提供了多種語言的API。近日,Redis 3.0在經過6個RC版本後,其正式版終於釋出了。Redis 3.0的最重要特徵是對Redis叢集的支援,此外,該版本相對於2.8版本在效能、穩定性等方面都有了重大提高。
Redis 3.0正式版相對於RC6版本的改進內容包括:
1.修復了無磁碟情況下的的複製問題;
2.在角色變化後對BLPOP複製進行了測試;
3.改進了prepareClientToWrite()錯誤處理;
4.移除了dict.c中不再使用的函式。
Redis 3.0版本相對於2.8版本帶來的主要新特性包括:
1.實現了分散式的Redis即Redis Cluster,從而做到了對叢集的支援;
2.引入了全新的"embedded string" 物件編碼方式,從而實現了更少的快取丟失和在特定的工作負載下速度的大幅提升;
3.AOF重寫過程中的 "last write" 操作降低了AOF child -> parent資料傳輸的延遲大幅提升LRU演算法的效能以用於值的失效;
4.WAIT命令能夠阻塞傳輸到指定數量從節點的寫操作;
5.實現了對MIGRATE連線快取的支援,從而大幅提升鍵值遷移的效能;
6.為MIGARTE新增了引數:COPY和REPLACE;
7.CLIENT PAUSE命令實現了在指定時間內停止處理客戶端請求;
8.提高了BITCOUNTINCR操作的效能;
9.CONFIG SET能夠接受不同單位的記憶體值,如CONFIG SET maxmemory 1gb;
10.調整Redis日誌格式。
Redis之父Salvatore Sanfilippo針對Redis 3.0正式版的釋出這樣說到:“自己相信Redis 3.0將能夠完全改變Redis的面貌,人們將認識到Redis是一個全新的東西,它的自動擴充套件、容錯和高可用性都有了很大的改進,從此,它將能夠在更大範圍內承擔更關鍵的任務。Redis 3.0標誌著一個新階段和新開發模式的開始。以後,大量已經開發的新功能將不再急於進入穩定版本,實際上Redis 3.0就放棄了很多新功能,從而保證使用者能夠馬上使用新的穩定版本。”

Redis叢集是一個可以在多個 Redis 節點之間進行資料共享的設施(installation)。
Redis叢集不支援那些需要同時處理多個鍵的 Redis 命令, 因為執行這些命令需要在多個 Redis 節點之間移動資料, 並且在高負載的情況下, 這些命令將降低 Redis 叢集的效能, 並導致不可預測的行為。
Redis叢集通過分割槽(partition)來提供一定程度的可用性(availability): 即使叢集中有一部分節點失效或者無法進行通訊, 叢集也可以繼續處理命令請求。
Redis 叢集提供了以下兩個好處:
1.將資料自動切分(split)到多個節點的能力。
2.當叢集中的一部分節點失效或者無法進行通訊時, 仍然可以繼續處理命令請求的能力。
注:
1.Sentinel還在與Cluster並行繼續開發中。目前單例項場景下需要HA的話,它還是最佳選擇。但長遠看,我們會用Cluster解決Sentinel的使用場景。
2.Redis 叢集使用資料分片(sharding)而非一致性雜湊(consistency hashing)來實現:
一個 Redis 叢集包含 16384 個雜湊槽(hash slot), 資料庫中的每個鍵都屬於這 16384 個雜湊槽的其中一個, 叢集使用公式 CRC16(key) % 16384 來計算鍵 key 屬於哪個槽, 其中 CRC16(key) 語句用於計算鍵 key 的 CRC16 校驗和 。

3.為了使得叢集在一部分節點下線或者無法與叢集的大多數(majority)節點進行通訊的情況下, 仍然可以正常運作, Redis 叢集對節點使用了主從複製功能: 叢集中的每個節點都有 1 個至 N 個複製品(replica), 其中一個複製品為主節點(master), 而其餘的 N-1 個複製品為從節點(slave)。
4。Redis 叢集不保證資料的強一致性(strong consistency):
在特定條件下, Redis 叢集可能會丟失已經被執行過的寫命令。

使用非同步複製(asynchronous replication)是 Redis 叢集可能會丟失寫命令的其中一個原因。
Redis 叢集另外一種可能會丟失命令的情況是, 叢集出現網路分裂(network partition), 並且一個客戶端與至少包括一個主節點在內的少數(minority)例項被孤立。
5.Redis 叢集的鍵空間被分割為 16384 個槽(slot), 叢集的最大節點數量也是 16384 個。推薦的最大節點數量為 1000 個左右。

轉至:http://www.infoq.com/cn/news/2015/04/redis-3-release

參考文件:
1.官方叢集文件:規範與教程
英文:
http://redis.io/topics/cluster-spec
http://redis.io/topics/cluster-tutorial
中文:
http://redis.readthedocs.org/en/latest/topic/cluster-spec.html
http://redis.readthedocs.org/en/latest/topic/cluster-tutorial.html
2.Redis 3.0官方文件中文翻譯

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26838672/viewspace-1815182/,如需轉載,請註明出處,否則將追究法律責任。

相關文章