Jedis做爲推薦的java語言redis客戶端,其抽象封裝爲三部分:java
其類設計圖以下: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是基於一致性哈希算法實現的分佈式Redis集羣客戶端;ShardedJedis的設計分爲如下幾塊:服務器
關於ShardedJedis設計,忽略了Jedis的設計細節,設計類圖以下:socket
關於ShardedJedis類圖設計,省略了對象池,以及Jedis設計的如下細節介紹: 分佈式
類名 | 職責 |
Sharded | 抽象了基於一致性哈希算法的劃分設計,設計思路google
|
BinaryShardedJedis | 同BinaryJedis相似,實現BinaryJedisCommands對外提供基於Byte[]的key,value操做 |
ShardedJedis | 同Jedis相似,實現JedisCommands對外提供基於String的key,value操做 |
shared一致性哈希採用如下方案:spa
sharded採用的hash算法:MD5 和 MurmurHash兩種;默認採用64位的MurmurHash算法;有興趣的能夠研究下,MurmurHash是一種高效,低碰撞的hash算法;參考地址:.net