[redis] Jedis 与 ShardedJedis 设计
生活随笔
收集整理的這篇文章主要介紹了
[redis] Jedis 与 ShardedJedis 设计
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Jedis設(shè)計(jì)
Jedis作為推薦的java語言redis客戶端,其抽象封裝為三部分:
?
?
其類設(shè)計(jì)圖如下:
?
?
關(guān)于common-pool的相關(guān)內(nèi)容,可以參見:http://macrochen.iteye.com/blog/320077
?
其他類的設(shè)計(jì)作用如下:
?
?
| 類名 | 職責(zé) |
| Pool | 抽象Jedis對象池操作;并委托給操作給GenericObjectPool |
| JedisPool | 實(shí)現(xiàn)Pool并提供JedisFactory工廠 |
| JedisFactory | 實(shí)現(xiàn)BasePoolableObjectFactory,提供創(chuàng)建,銷毀Jedis方法 |
| BinaryJedisCommands | 抽象面向客戶端操作的Redis命令;key,value都為序列化后的byte數(shù)組 |
| JedisCommands | 抽象面向客戶端操作的Redis命令;提供String類型的key,value |
| BinaryJedis | 實(shí)現(xiàn)BinaryJedisCommands接口,并將實(shí)際操作委托給Client |
| Jedis | 實(shí)現(xiàn)JedisCommands接口,并將操作委托給Client |
| Commands | 抽象Redis操作接口,提供String類型的key,value操作;被Jedis調(diào)用 |
| Connection | 抽象了Redis連接;包括host,port,pass,socket,inputstream,outputstream,protocol 完成與Redis服務(wù)器的通信 |
| Protocol | 抽象了Redis協(xié)議處理 |
| BinaryClient | 繼承Connection類,封裝了基于Byte[]的key,value操作 |
| Client | 繼承BinaryClient同時(shí)實(shí)現(xiàn)了Commands,對上層提供基于String類型的操作 |
?
?
ShardedJedis實(shí)現(xiàn)分析
ShardedJedis是基于一致性哈希算法實(shí)現(xiàn)的分布式Redis集群客戶端;ShardedJedis的設(shè)計(jì)分為以下幾塊:
?
關(guān)于ShardedJedis設(shè)計(jì),忽略了Jedis的設(shè)計(jì)細(xì)節(jié),設(shè)計(jì)類圖如下:
?
關(guān)于ShardedJedis類圖設(shè)計(jì),省略了對象池,以及Jedis設(shè)計(jì)的以下細(xì)節(jié)介紹:?
| 類名 | 職責(zé) |
| Sharded | 抽象了基于一致性哈希算法的劃分設(shè)計(jì),設(shè)計(jì)思路 ? |
| BinaryShardedJedis | 同BinaryJedis類似,實(shí)現(xiàn)BinaryJedisCommands對外提供基于Byte[]的key,value操作 |
| ShardedJedis | 同Jedis類似,實(shí)現(xiàn)JedisCommands對外提供基于String的key,value操作 |
?
?
Sharded一致性哈希實(shí)現(xiàn)
shared一致性哈希采用以下方案:
總結(jié)
以上是生活随笔為你收集整理的[redis] Jedis 与 ShardedJedis 设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nexus搭建私服
- 下一篇: 第一次接触终极事务处理——Hekaton