昆明java培训
达内昆明广州春城路

18487146383

热门课程

edisFactory的实现

  • 时间:2016-08-31
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明达内Java培训的老师首先看JedisFactory的实现:

class JedisFactory implements PooledObjectFactory<Jedis> {

private final AtomicReference<HostAndPort> hostAndPort = new AtomicReference<HostAndPort>();

private final int connectionTimeout;

private final int soTimeout;

//省略构造函数,都是一些初始化成员变量的操作

@Override

public void activateObject(PooledObject<Jedis> pooledJedis) throws Exception {

final BinaryJedis jedis = pooledJedis.getObject();

if (jedis.getDB() != database) {

jedis.select(database);

}

}

@Override

public void destroyObject(PooledObject<Jedis> pooledJedis) throws Exception {

final BinaryJedis jedis = pooledJedis.getObject();

if (jedis.isConnected()) {

try {

try {

jedis.quit();

} catch (Exception e) {

}

jedis.disconnect();

} catch (Exception e) {

}

}

}

@Override

public PooledObject<Jedis> makeObject() throws Exception {

final HostAndPort hostAndPort = this.hostAndPort.get();

final Jedis jedis = new Jedis(hostAndPort.getHost(), hostAndPort.getPort(), connectionTimeout, soTimeout, ssl,

sslSocketFactory, sslParameters, hostnameVerifier);

try {

jedis.connect();

if (null != this.password) {

jedis.auth(this.password);

}

if (database != 0) {

jedis.select(database);

}

if (clientName != null) {

jedis.clientSetname(clientName);

}

} catch (JedisException je) {

jedis.close();

throw je;

}

return new DefaultPooledObject<Jedis>(jedis);

}

@Override

public void passivateObject(PooledObject<Jedis> pooledJedis) throws Exception {

// TODO maybe should select db 0? Not sure right now.

}

@Override

public boolean validateObject(PooledObject<Jedis> pooledJedis) {

final BinaryJedis jedis = pooledJedis.getObject();

try {

HostAndPort hostAndPort = this.hostAndPort.get();

String connectionHost = jedis.getClient().getHost();

int connectionPort = jedis.getClient().getPort();

return hostAndPort.getHost().equals(connectionHost) && hostAndPort.getPort() == connectionPort

&& jedis.isConnected() && jedis.ping().equals("PONG");

} catch (final Exception e) {

return false;

}

}

}

我们看到JedisFactory代码较少,但是逻辑很清晰。该Factory将作为ObjectPool的成员变量,其中四个重写的方法被ObjectPool管理对象生命周期的时候调用。

makeobject()方法负责创建Jedis实例,成功调用connect()方法建立有状态的socket连接之后,返回一个包装了jedis的DefaultPooledObject对象,DefaultPooledObject实现了关于统计池化对象状态信息的PooledObject接口。

validateObject()方法用于对对象状态的检验,Jedis对象的状态通过socket的ping-pong来验证连接是否正常。

destroyObject()方法用来销毁对象,Jedis对象将会断开连接,回收资源。

学Java开发就到昆明达内Java培训班!了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:使用JedisPool操作Redis
下一篇:JedisPool的实现

Effective java的创建和销毁对象

昆明达内Java培训学费多少?

LinkedIn服务:三人行,必有我师【达内java培训】

Java培训:7月排行榜Go创新高Java稳第一

选择城市和中心
贵州省

广西省

海南省

台湾