您好,登錄后才能下訂單哦!
這篇文章主要講解了“Jedis與ShardedJedis設計方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Jedis與ShardedJedis設計方法是什么”吧!
Jedis作為推薦的java語言redis客戶端,其抽象封裝為三部分:
對象池設計:Pool,JedisPool,GenericObjectPool,BasePoolableObjectFactory,JedisFactory
面向用戶的redis操作封裝:BinaryJedisCommands,JedisCommands,BinaryJedis,Jedis
面向redis服務器的操作封裝:Commands,Client,BinaryClient,Connection,Protocol
其類設計圖如下:
關于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的設計分為以下幾塊:
對象池設計:Pool,ShardedJedisPool,ShardedJedisFactory
面向用戶的操作封裝:BinaryShardedJedis,BinaryShardedJedis
一致性哈希實現:Sharded
關于ShardedJedis設計,忽略了Jedis的設計細節,設計類圖如下:
關于ShardedJedis類圖設計,省略了對象池,以及Jedis設計的以下細節介紹:
類名 | 職責 |
Sharded | 抽象了基于一致性哈希算法的劃分設計,設計思路
|
BinaryShardedJedis | 同BinaryJedis類似,實現BinaryJedisCommands對外提供基于Byte[]的key,value操作 |
ShardedJedis | 同Jedis類似,實現JedisCommands對外提供基于String的key,value操作 |
shared一致性哈希采用以下方案:
Redis服務器節點劃分:將每臺服務器節點采用hash算法劃分為160個虛擬節點(可以配置劃分權重)
將劃分虛擬節點采用TreeMap存儲
對每個Redis服務器的物理連接采用LinkedHashMap存儲
對Key or KeyTag 采用同樣的hash算法,然后從TreeMap獲取大于等于鍵hash值得節點,取最鄰近節點存儲;當key的hash值大于虛擬節點hash值得最大值時,存入第一個虛擬節點
sharded采用的hash算法:MD5 和 MurmurHash兩種;默認采用64位的MurmurHash算法;有興趣的可以研究下,MurmurHash是一種高效,低碰撞的hash算法
感謝各位的閱讀,以上就是“Jedis與ShardedJedis設計方法是什么”的內容了,經過本文的學習后,相信大家對Jedis與ShardedJedis設計方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。