前言
工作中要使用redis作为cache server,目前应用是SSH架构,redis官方推荐的java客户端jedis,这里记录我使用过程中的问题和解决办法,jedis版本是2.1.0。
Jedis的框架概览
Jedis使用了apache commons-pool库,用来实现连接redis客户端的池子。
commons-pool库中有三个类:GenericObjectPool、PoolableObjectFactory、Config,其中:
PoolableObjectFactory:表示一个对象工厂,含有能控制一个对象生命周期的方法,如创建、销毁、验证、激活、失效等操作;
GenericObjectPool:表示了一个抽象的、支持泛型的对象池,ta内部包含从池中取出、退还、验证对象等操作(使用对象工厂PoolableObjectFactory来完成相应操作),并且记录了当前池中的active、idle对象的个数;
Config:则表示一个对象池的配置,配置参数包括:最大active、最大idle、最大wait毫秒数等。
Jedis中比较重要的几个类:
Jedis:表示一个Jedis Cilent示例;
Pool:继承自GenericObjectPool,表示一个支持泛型的对象池,构造方法接受Config和PoolableObjectFactory参数,使用代理模式(内部有一个GenericObjectPool对象),并提供了getResource、returnResource等操作(通过PoolableObjectFactory的操作来完成);【这个对象,被jedis放在了util包中,ta是个对象池工具类,可直接用于其他对象实现对象池。】
JedisPool:继承自Pool,利用Pool对泛型的支持实现了一个Jedis对象的对象池;
JedisFactory:继承自PoolableObjectFactory,包含了Jedis对象的生命周期管理;
JedisPoolConfig:继承自Config,ta只是为了方便与IoC容器(.java文件中有与Spring集成的示例代码)的集成,Config的各个类增加setter/getter方法;
【在Jedis中,与redis的pub/sub、pipeline、sharded等,暂时没用到,所以也没去看】
Jedis的使用
1.如何管理Jedis实例
Jedis在github上的readme中,介绍了最简单的Jedis实例使用方法,如下:
Jedis jedis = new Jedis("localhost");
jedis.set("foo", "bar");