rediscluster本质是连接池吗?使用 apache-common-pool2 创建自己的rediscluster资源池

bluss-yang 2018-03-21 12:08:00
下面是我写的代码,如有问题请指出
package test;

import java.util.LinkedHashSet;
import java.util.Set;

import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

public class LpPoolFactory implements PooledObjectFactory<JedisCluster> {

/**
* 功能描述:激活资源对象
*
* 什么时候会调用此方法
* 1:从资源池中获取资源的时候
* 2:资源回收线程,回收资源的时候,根据配置的 testWhileIdle 参数,判断 是否执行 factory.activateObject()方法,true 执行,false 不执行
* @param arg0
*/
public void activateObject(PooledObject<JedisCluster> arg0) throws Exception {
System.out.println("activate Object");
}


public void destroyObject(PooledObject<JedisCluster> arg0) throws Exception {
System.out.println("destroy Object");
JedisCluster JedisCluster = arg0.getObject();
JedisCluster = null;
}


public PooledObject<JedisCluster> makeObject() throws Exception {
System.out.println("make Object");
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大连接数
poolConfig.setMaxTotal(300);
// 最大空闲数
poolConfig.setMaxIdle(10);
// 最大允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:
// Could not get a resource from the pool
poolConfig.setMaxWaitMillis(1000);
Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.88.140", 7000));
nodes.add(new HostAndPort("192.168.88.140", 7001));
nodes.add(new HostAndPort("192.168.88.140", 7002));
nodes.add(new HostAndPort("192.168.88.140", 7003));
nodes.add(new HostAndPort("192.168.88.140", 7004));
nodes.add(new HostAndPort("192.168.88.140", 7005));
JedisCluster JedisCluster = new JedisCluster(nodes, poolConfig);
return new DefaultPooledObject<JedisCluster>(JedisCluster);
}

/**
* 功能描述:钝化资源对象
*
* 什么时候会调用此方法
* 1:将资源返还给资源池时,调用此方法。
*/

public void passivateObject(PooledObject<JedisCluster> arg0) throws Exception {
System.out.println("passivate Object");
}

/**
* 功能描述:判断资源对象是否有效,有效返回 true,无效返回 false
*
* 什么时候会调用此方法
* 1:从资源池中获取资源的时候,参数 testOnBorrow 或者 testOnCreate 中有一个 配置 为 true 时,则调用 factory.validateObject() 方法
* 2:将资源返还给资源池的时候,参数 testOnReturn,配置为 true 时,调用此方法
* 3:资源回收线程,回收资源的时候,参数 testWhileIdle,配置为 true 时,调用此方法
*/

public boolean validateObject(PooledObject<JedisCluster> arg0) {
System.out.println("validate Object");
return true;
}
}

连接池测试类

package test;

import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import redis.clients.jedis.JedisCluster;

public class testpool {
public static void main(String[] args) throws Exception{
//工厂
LpPoolFactory factory = new LpPoolFactory();
//资源池配置
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMinIdle(2);
//创建资源池
GenericObjectPool<JedisCluster> objectPool = new GenericObjectPool<JedisCluster>(factory,poolConfig);

for(int i=0; i<3; i++) {
Thread.sleep(1000);
//获取资源对象
JedisCluster jedisCluster = objectPool.borrowObject();
//将获取的资源对象,返还给资源池
objectPool.returnObject(jedisCluster);
//输出资源对象
System.out.println(jedisCluster);
System.out.println();
}

}

}


不知道这样是不是可以实现rediscluster的连接池
...全文
417 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
Apache Commons是一个非常有用的工具包,解决各种实际的通用问题。(附件中提供了该工具包的jar包,及源文件以供研究) BeanUtils Commons-BeanUtils 提供对 Java 反射和自省API的包装 Betwixt Betwixt提供将 JavaBean 映射至 XML 文档,以及相反映射的服务. Chain Chain 提供实现组织复杂的处理流程的“责任链模式”. CLI CLI 提供针对命令行参数,选项,选项组,强制选项等的简单API. Codec Codec 包含一些通用的编码解码算法。包括一些语音编码器, Hex, Base64, 以及URL encoder. Collections Commons-Collections 提供一个类包来扩展和增加标准的 Java Collection框架 Configuration Commons-Configuration 工具对各种各式的配置和参考文件提供读取帮助. Daemon 一种 unix-daemon-like java 代码的替代机制 DBCP Commons-DBCP 提供数据库连接服务 DbUtils DbUtils 是一个 JDBC helper 类库,完成数据库任务的简单的资源清除代码. Digester Commons-Digester 是一个 XML-Java对象的映射工具,用于解析 XML配置文件. Discovery Commons-Discovery 提供工具来定位资源 (包括类) ,通过使用各种模式来映射服务/引用名称和资源名称。. EL Commons-EL 提供在JSP2.0规范中定义的EL表达式的解释器. FileUpload FileUpload 使得在你可以在应用和Servlet中容易的加入强大和高性能的文件上传能力 HttpClient Commons-HttpClient 提供了可以工作于HTTP协议客户端的一个框架. IO IO 是一个 I/O 工具集 Jelly Jelly是一个基于 XML 的脚本和处理引擎。 Jelly 借鉴了 JSP 定指标签,Velocity, Cocoon和Xdoclet中的脚本引擎的许多优点。Jelly 可以用在命令行, Ant 或者 Servlet之中。 Jexl Jexl是一个表达式语言,通过借鉴来自于Velocity的经验扩展了JSTL定义的表达式语言。. JXPath Commons-JXPath 提供了使用Xpath语法操纵符合Java类命名规范的 JavaBeans的工具。也支持 maps, DOM 和其他对象模型。. Lang Commons-Lang 提供了许多许多通用的工具类集,提供了一些java.lang中类的扩展功能 Latka Commons-Latka 是一个HTTP 功能测试包,用于自动化的QA,验收和衰减测试. Launcher Launcher 组件是一个交叉平台的Java 应用载入器。 Commons-launcher 消除了需要批处理或者Shell脚本来载入Java 类。.原始的 Java 类来自于Jakarta Tomcat 4.0 项目 Logging Commons-Logging 是一个各种 logging API实现的包裹类. Math Math 是一个轻量的,自包含的数学和统计组件,解决了许多非常通用但没有及时出现在Java标准语言中的实践问题. Modeler Commons-Modeler 提供了建模兼容JMX规范的 Mbean的机制. Net Net 是一个网络工具集,基于 NetComponents 代码,包括 FTP 客户端等等。 Pool Commons-Pool 提供了通用对象接口,一个用于创建模块化对象的工具包,以及通常的对象实现. Primitives Commons-Primitives提供了一个更小,更快和更易使用的对Java基本类型的支持。当前主要是针对基本类型的 collection。. Validator The commons-validator提供了一个简单的,可扩展的框架来在一个XML文件中定义校验器 (校验方法)和校验规则。支持校验规则的和错误消息的国际化。

50,338

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧