使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip
如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip
?
一般的,使用Jedis都需要使用连接池来获取连接
一、连接池的配置和使用
首先在spring中配置jedis连接池的一些配置信息
??
class="xml"><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.maxTotal}"></property> <property name="maxIdle" value="${redis.maxIdle}"></property> <property name="minIdle" value="${redis.minIdle}"></property> <property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property> <property name="testOnBorrow" value="${redis.testOnBorrow}"></property> <property name="testOnReturn" value="${redis.testOnReturn}"></property> <property name="minEvictableIdleTimeMillis" value="${redis.minEvictableIdleTimeMillis}"></property> <property name="numTestsPerEvictionRun" value="${redis.numTestsPerEvictionRun}"></property> <property name="timeBetweenEvictionRunsMillis" value="${redis.timeBetweenEvictionRunsMillis}"></property> </bean>
?这些配置的具体描述信息可以简单的提一下:
?
?
maxTotal:最大连接数
maxIdle:最大空闲连接数
minIdle:最小空闲连接数
maxWaitMillis:获取连接时最大等待毫秒数,
testOnBorrow:获取连接时检查有效性
testOnRetrun:return给pool时,是否提前进行validate操作
minEvictableIdleTimeMillis:一个对象至少停留在idle状态的最短时间,才能被Idle, object evitor扫描并驱逐
numTestsPerEvictionRun:idle,object,evitor每次扫描对象的数
timeBetweenEvictionRunsMillis:释放连接的扫描间隔
配置完jedis连接池配置之后就可以配置连接池了
?
?
?
<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy"> <constructor-arg index="0" ref="jedisPoolConfig" /> <constructor-arg index="1" value="${redis.hostName}" type="java.lang.String"/> <constructor-arg index="2" value="${redis.port}" type="int" /> <constructor-arg index="3" value="${redis.timeout}" type="int" /> <constructor-arg index="4" value="${redis.auth}" type="java.lang.String"/> </bean>
?这里配置了jedis的连接池配置,名称地址以及端口密码等
?
?
。连接池就算是配好了,接下来我们就可以配置获取连接的类了:
?
import redis.clients.jedis.Jedis; import redis.clients.util.Pool; public class Test { private Pool<Jedis> redisPool; public Pool<Jedis> getRedisPool() { return redisPool; } public void setRedisPool(Pool<Jedis> redisPool) { this.redisPool = redisPool; } public Jedis getJedis() { try { Jedis jedis = redisPool.getResource(); if (jedis == null) { return null; } return jedis; } catch (Exception e) { } return null; } public void release(Jedis jedis) { if (jedis != null) { jedis.close(); } } public void init(){ } public static void main(String[] args) { } }
?这样我们可以写一个工具类来管理jedis的获取以及关闭等:
?
?public static Jedis getJedis(Integer index){
? ? ? ? Jedis jedis = null;
? ? ? ? JedisClient jedisClient = (JedisClient)ctx.getBean("jedisClient");
? ? ? ? if(null!=jedisClient){
? ? ? ? ? ? jedis = jedisClient.getJedis();
? ? ? ? }
? ? ? ? try{
? ? ? ? ? ? jedis.select(index);
? ? ? ? }catch(Exception e){
? ? ? ? ? ? jedis.select(JedisDBEnum.DEFAULT.getIndex().intValue());
? ? ? ? ? ? log.info("getJedis index:"+index+" and default select db 0",e);
? ? ? ? }
? ? ? ? return jedis;
?
? ? }
?
这一段很简单就是获取一个jedis连接,然后选择几号库,当然,用完jedis之后需要关闭连接
public static void closeJeids(Jedis jedis){
? ? ? ? try{
? ? ? ? ? ? if(null!=jedis){
? ? ? ? ? ? ? ? jedis.close();
? ? ? ? ? ? }
? ? ? ? }catch(Exception e){
? ? ? ? ? ? ? ? ? ??
? ? ? ? }
?
? ? }
这就是通过jedis连接池获取jedis连接的全部流程了
?
?
?
?
?