课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > edisFactory的实现
  • edisFactory的实现

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

  • 昆明达内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的实现

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56