Jedis 與 ShardedJedis 設計

Jedis設計

Jedis做爲推薦的java語言redis客戶端,其抽象封裝爲三部分:java

 

  1. 對象池設計:Pool,JedisPool,GenericObjectPool,BasePoolableObjectFactory,JedisFactory
  2. 面向用戶的redis操做封裝:BinaryJedisCommands,JedisCommands,BinaryJedis,Jedis
  3. 面向redis服務器的操做封裝:Commands,Client,BinaryClient,Connection,Protocol

 

其類設計圖以下:redis

 


 

關於common-pool的相關內容,能夠參見:http://macrochen.iteye.com/blog/320077算法

 

其餘類的設計做用以下:數組

 

 

類名 職責
Pool 抽象Jedis對象池操做;並委託給操做給GenericObjectPool
JedisPool 實現Pool並提供JedisFactory工廠
JedisFactory 實現BasePoolableObjectFactory,提供建立,銷燬Jedis方法
BinaryJedisCommands 抽象面向客戶端操做的Redis命令;key,value都爲序列化後的byte數組
JedisCommands 抽象面向客戶端操做的Redis命令;提供String類型的key,value
BinaryJedis 實現BinaryJedisCommands接口,並將實際操做委託給Client
Jedis 實現JedisCommands接口,並將操做委託給Client
Commands 抽象Redis操做接口,提供String類型的key,value操做;被Jedis調用
Connection 抽象了Redis鏈接;包括host,port,pass,socket,inputstream,outputstream,protocol 完成與Redis服務器的通訊
Protocol 抽象了Redis協議處理
BinaryClient 繼承Connection類,封裝了基於Byte[]的key,value操做
Client 繼承BinaryClient同時實現了Commands,對上層提供基於String類型的操做

 

 

ShardedJedis實現分析

ShardedJedis是基於一致性哈希算法實現的分佈式Redis集羣客戶端;ShardedJedis的設計分爲如下幾塊:服務器

 

  1. 對象池設計:Pool,ShardedJedisPool,ShardedJedisFactory
  2. 面向用戶的操做封裝:BinaryShardedJedis,BinaryShardedJedis
  3. 一致性哈希實現:Sharded

關於ShardedJedis設計,忽略了Jedis的設計細節,設計類圖以下:socket

 



關於ShardedJedis類圖設計,省略了對象池,以及Jedis設計的如下細節介紹: 分佈式

類名 職責
Sharded

抽象了基於一致性哈希算法的劃分設計,設計思路google

 

  1. 基於hash算法劃分redis服務器
  2. 保持每臺Redis服務器的Jedis客戶端
  3. 提供基於Key的劃分方法;提供了ShardKeyTag實現
BinaryShardedJedis 同BinaryJedis相似,實現BinaryJedisCommands對外提供基於Byte[]的key,value操做
ShardedJedis 同Jedis相似,實現JedisCommands對外提供基於String的key,value操做

 

 

Sharded一致性哈希實現

shared一致性哈希採用如下方案:spa

 

 

  1. Redis服務器節點劃分:將每臺服務器節點採用hash算法劃分爲160個虛擬節點(能夠配置劃分權重)
  2. 將劃分虛擬節點採用TreeMap存儲
  3. 對每一個Redis服務器的物理鏈接採用LinkedHashMap存儲
  4. 對Key or KeyTag 採用一樣的hash算法,而後從TreeMap獲取大於等於鍵hash值得節點,取最鄰近節點存儲;當key的hash值大於虛擬節點hash值得最大值時,存入第一個虛擬節點

sharded採用的hash算法:MD5 和 MurmurHash兩種;默認採用64位的MurmurHash算法;有興趣的能夠研究下,MurmurHash是一種高效,低碰撞的hash算法;參考地址:.net

http://blog.csdn.net/yfkiss/article/details/7337382

https://sites.google.com/site/murmurhash/  

相關文章
相關標籤/搜索