Redis Sharding群集
#Redis 3正式推出了官方叢集技術,解決了多Redis實例協同服務問題。 Redis Cluster可說是服務端Sharding分片技術的體現,即將鍵值依照某一演算法合理分配到各個實例分片上,同時各個實例節點協調溝通,共同對外承擔一致服務。 (建議學習:Redis視訊教學)
多Redis實例服務,比單一Redis實例要複雜的多,這涉及定位、協同、容錯、擴容等技術難題。這裡,我們介紹一種輕量級的客戶端Redis Sharding技術。
Redis Sharding可以說是Redis Cluster出來之前,業界普遍使用的多Redis實例叢集方法。其主要想法是採用哈希演算法將Redis資料的key進行雜湊,透過hash函數,特定的key會映射到特定的Redis節點上。 這樣,客戶端就知道該向哪個Redis節點操作資料。
慶幸的是,java redis客戶端驅動jedis,已支援Redis Sharding功能,即ShardedJedis以及結合快取池的ShardedJedisPool。
Jedis的Redis Sharding實作具有以下特點:
#採用一致性雜湊演算法(consistent hashing),將key和節點name同時hashing,然後進行映射匹配,採用的演算法是MURMUR_HASH。
採用一致性雜湊而不是採用簡單類似哈希求模映射的主要原因是當增加或減少節點時,不會產生由於重新匹配造成的rehashing。一致性雜湊只影響相鄰節點key分配,影響量小。
為了避免一致性雜湊只會影響相鄰節點造成節點分配壓力,ShardedJedis會對每個Redis節點根據名字(沒有,Jedis會賦予缺省名字)會虛擬化出160個虛擬節點進行散列。
根據權重weight,也可虛擬化出160倍數的虛擬節點。用虛擬節點做映射匹配,可以在增加或減少Redis節點時,key在各Redis節點移動再分配更均勻,而不是只有相鄰節點受影響。
ShardedJedis支持keyTagPattern模式,即抽取key的一部分keyTag做sharding,這樣透過合理命名key,可以將一組相關聯的key放入同一個Redis節點,這在避免跨節點存取相關資料時很重要。
以上是redis怎麼做集群的詳細內容。更多資訊請關注PHP中文網其他相關文章!