按照上圖所示,本身寫一段邏輯,根據客戶端請求循環寫入不一樣Redis服務器程序員
優勢:redis
缺點:算法
哈希取餘就是一種特殊的自定義分片方式數據庫
優勢:這裏介紹的三種方式最差的服務器
缺點:spa
它是Jedis採用的分片方式,並提供了JedisShardInfo、JedisPoolConfig、ShardedJedisPool、ShardedJedis 相關API作成redis鏈接池,分片邏輯對程序員透明ip
用圖來直觀瞭解一下哈希一致性的分片算法,看到下面的圖不要懼怕,根據後面的文字描述搭配着看內存
表明真實的redis服務器循環
表明虛擬的redis服務器,虛擬服務器隸屬於真實服務器,好比虛擬2服務器須要存放的數據被真實的存放到redis2服務器上請求
表明數據
說明:
1.圖中最大的圓是由2^32個點組成的圓,每一個點是1到2^32中的一個數
算法:
1.jedis根據redis服務器的ip+port+其餘輸入信息計算出一個哈希值,並將該哈希值映射到圓上
2.jedis根據key計算出一個哈希值,並將該哈希值映射到圓上
3.jedis根據key在圓上的位置順時針找第一個redis服務器哈希值映射的點,該點對於的服務器就是key-value存儲的服務器
4.若是隻存在redis服務器的點,數據傾斜仍是會常常發生,爲了解決這一問題,jedis根據真是服務器的信息虛擬出n*1000個虛擬服務器,將整個圓分段更多,數據(key-value)存放便更均勻,解決數據傾斜的問題,其中n是真實redis服務器的臺數
圖中無法畫出4000個虛擬服務器,只是給每一臺真實redis服務器虛擬一臺服務器,且畫的最理想哈希結果,最終每臺服務器存放兩個數據。