Jedis设计
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实现分析
ShardedJedis是基于一致性哈希算法实现的分布式Redis集群客户端;ShardedJedis的设计分为以下几块:
- 对象池设计:Pool,ShardedJedisPool,ShardedJedisFactory
- 面向用户的操作封装:BinaryShardedJedis,BinaryShardedJedis
- 一致性哈希实现:Sharded
关于ShardedJedis设计,忽略了Jedis的设计细节,设计类图如下:
关于ShardedJedis类图设计,省略了对象池,以及Jedis设计的以下细节介绍:
类名 |
职责 |
Sharded |
抽象了基于一致性哈希算法的划分设计,设计思路
- 基于hash算法划分redis服务器
- 保持每台Redis服务器的Jedis客户端
- 提供基于Key的划分方法;提供了ShardKeyTag实现
|
BinaryShardedJedis |
同BinaryJedis类似,实现BinaryJedisCommands对外提供基于Byte[]的key,value操作 |
ShardedJedis |
同Jedis类似,实现JedisCommands对外提供基于String的key,value操作 |
Sharded一致性哈希实现
shared一致性哈希采用以下方案:
- Redis服务器节点划分:将每台服务器节点采用hash算法划分为160个虚拟节点(可以配置划分权重)
- 将划分虚拟节点采用TreeMap存储
- 对每个Redis服务器的物理连接采用LinkedHashMap存储
- 对Key or KeyTag 采用同样的hash算法,然后从TreeMap获取大于等于键hash值得节点,取最邻近节点存储;当key的hash值大于虚拟节点hash值得最大值时,存入第一个虚拟节点
sharded采用的hash算法:MD5 和 MurmurHash两种;默认采用64位的MurmurHash算法;有兴趣的可以研究下,MurmurHash是一种高效,低碰撞的hash算法;参考地址:
- 大小: 52.9 KB
- 大小: 43.2 KB
分享到:
相关推荐
jedis-2.9.0.jar jedis-2.9.0 jar 包,不包含源码,源码下载地址: http://download.csdn.net/download/tan3739/9993938 测试代码: 导入依赖包: commons-lang-2.5.jar commons-pool2-2.4.2.jar jedis-2.9.0 jar ...
关于Redis 3.0.7 的集群部署 及 jedis2.8 与 spring3.2 整合的测试笔记 配套小程序
jedis jar包; 版本:2.0 2.1
而且发现Jedis和ShardedJedis的方法非常多,覆盖了Redis几乎所有操作,但是没有注释,也没有异常处理,也没有资源回收,所以我就对这两个类进行了再次封装,对照着Redis官网的中文API加上了中文注释,并对接口方法...
jedis依赖jar包, jedis-2.7.0.jar
jedis相关jar包:commons-pool2-2.3.jar、jedis-2.7.0.jar
赠送jar包:jedis-2.9.0.jar; 赠送原API文档:jedis-2.9.0-javadoc.jar; 赠送源代码:jedis-2.9.0-sources.jar; 包含翻译后的API文档:jedis-2.9.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId...
赠送jar包:jedis-2.8.0.jar; 赠送原API文档:jedis-2.8.0-javadoc.jar; 赠送源代码:jedis-2.8.0-sources.jar; 赠送Maven依赖信息文件:jedis-2.8.0.pom; 包含翻译后的API文档:jedis-2.8.0-javadoc-API文档-...
jedis和对应的pool,jedis是2.7版 pool是2.3版,使用的时候 解压使用里面的jar包
此资源为Java连接redis的工具jar,Jedis 版本为2.62; 有两个地方需要注意下;jedis 3.0新版本废弃了旧回收资源方法; 废弃方法为:JedisPool.returnResource(Jedis);回收资源 Jedis 3.0版本新回收资源: Jedis.close();...
Redis Windows32位+64位安装包,Linux压缩包, Redis图形操作管理软件,Jedis
Jedis 是 Redis 官方首选的 Java 客户端开发包。 实例方法: ? 1 import redis.clients.jedis.* ? 1 2 3 Jedis jedis = new Jedis("localhost"); jedis.set("foo", "bar"); String value = jedis.get("foo"); 支持...
jedis-test.7z jedis 简单测试 项目工程 lib 目录包含了依赖包: commons-lang-2.5.jar commons-pool2-2.4.2.jar jedis-2.9.0.jar 另: * Jedis 的源码工程(导入 eclipse 可直接运行): ...
jedis源码 (学习jedis必备,附带测试用例)
jedis-jedis-2.7.2缓存技术应用
使用redisson替代jedis中的的对应方法,以及对应的redis的命令在这三方中对应查询及操作,
Jedis2.1.0源码与Jar包,实现在Java中操作Redis服务器!
1 jedis分片支持数据库 2 动态的将有故障的服务器过滤掉 使用实例 static ShardedJedisPool shareJedisPool; static List<JedisShardInfo> jdsInfoList =new ArrayList(); static{ JedisPoolConfig config =new ...
要开始使用 Jedis,首先将其作为依赖项添加到您的 Java 项目中。如果使用 Maven: <groupId>redis.clients <artifactId>jedis <version>4.3.0 对于许多应用程序,最好使用连接池。实例化 Jedis 连接池: Jedis...
jedis jedis