************************************【单机环境redis客户端配置】***********************************************
Jedis是redis的Java客服端实现。对外调用的类只需要了解Jedis,JedisPool,JedisPoolConfig,JedisSharedInfo,SharedJedisPool,SharedJedis即可满足基本需求,其中带有shared的类是实现分片连接池的类,适用于redis集群。
下面通过spring的容器整合redis,通过spring的整合更能够简洁灵活的配置redis。
1、spring要管理的两个类:jedisPoolConfig(连接池配置)、jedisPool(连接池)(1)redisTest.xml配置文件:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">
ignore-unresolvable="true"/>
(2)将这写属性值统一放在一个redis-conf.properties配置文件中,方便管理:
#***********************jedis池参数设置************************************************************
#最大连接数
jedisPool.maxTotal=1000
#最大空闲连接数
jedisPool.maxIdle=50
#最小空闲连接数
jedisPool.minIdle=10
#获取连接时的最大等待毫秒数
jedisPool.maxWaitMillis=30000
#向调用者输出“链接”资源时,是否检测是有有效,如果无效则从连接池中移除,并尝试获取继续获取。设为true,一个挂都不能用。
jedisPool.testOnBorrow=false
#向连接池“归还”链接时,是否检测“链接”对象的有效性。
jedisPool.testOnReturn=true
#表示一个对象至少停留在idle状态的最短时间,然后才能被idle
jedisPool.minEvictableIdleTimeMillis=60000
#表示idle对象 每次扫描的最多的对象数
#设定在进行后台对象清理时,每次检查几个链接。默认值是3.
#如果numTestsPerEvictionRun>=0,则取numTestsPerEvictionRun和池内的链接数的较小值作为每次检测的链接数;
#如果numTestsPerEvictionRun<0,则每次检查的链接数是检查时池内链接的总数乘以这个值的负倒数再向上取整的结果。
jedisPool.numTestsPerEvictionRun=100
#释放连接的扫描间隔(毫秒)
jedisPool.timeBetweenEvictionRunsMillis=60000
#*****************************************************************************************************
#***********************jedis连接参数设置**************************************************************
#redis服务端口号
jedisPool.port=8000
#redis主机地址
jedisPool.host=127.0.0.1
#连接超时时间
jedisPool.timeout=50000
#redis服务密码
#jedisPool.password=admin
#******************************************************************************************************redis-password.properties配置连接redis的密码:
#redis服务密码
jedisPool.password=admin2、创建Redis的Java客户端
(1)初始化容器,获取jedisPool池bean
private void initContext(){
this.context = new ClassPathXmlApplicationContext("com/redisLock/redisTest.xml");
this.jedisPool = (JedisPool) context.getBean("redisPool");
}
(2)通过jedisPool获取Redis的Java客户端Jedis
/**
* 获取Jedis
* @param dbIndex
* @return
*/
public Jedis getJedis(Integer dbIndex) {
Jedis jedis = null;
jedis = jedisPool.getResource();
if (null == jedis){
logger.warn("Could not get a resource from the pool.");
return null;
}
try{
//如果发生异常,就选择默认的一个库
jedis.select(dbIndex);
}catch(Exception e){
jedis.select(DEFAULT);
logger.warn("Select default dataBase 0.");
}
return jedis;
}(3)关闭jedis
/**
* 关闭Jedis
* @param jedis
*/
public static void closeJedis(Jedis jedis){
if (null != jedis){
jedis.close();
}
}3、
使用枚举实现redis单例客户端
private RedisClient(){
initContext();
}
private static enum RedisClientEnum{
REDIS_CLIENT_INSTANCE;
private RedisClient redisClient;
private RedisClientEnum(){
redisClient = new RedisClient();
}
public RedisClient getRedisClientInstance(){
return redisClient;
}
}
//使用枚举获取RedisClient单例
public static RedisClient getInstance(){
return RedisClientEnum.REDIS_CLIENT_INSTANCE.getRedisClientInstance();
}
示例:
package com.redisLock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class RedisClient {
private static final Logger logger = LoggerFactory.getLogger(RedisClient.class);
private static final int DEFAULT = 0;
private JedisPool jedisPool;
private ClassPathXmlApplicationContext context;
private void initContext(){
this.context = new ClassPathXmlApplicationContext("com/redisLock/redisTest.xml");
this.jedisPool = (JedisPool) context.getBean("redisPool");
}
private RedisClient(){
initContext();
}
private static enum RedisClientEnum{
REDIS_CLIENT_INSTANCE;
private RedisClient redisClient;
private RedisClientEnum(){
redisClient = new RedisClient();
}
public RedisClient getRedisClientInstance(){
return redisClient;
}
}
//使用枚举获取RedisClient单例
public static RedisClient getInstance(){
return RedisClientEnum.REDIS_CLIENT_INSTANCE.getRedisClientInstance();
}
/**
* 获取Jedis
* @return
*/
public Jedis getJedis(){
return getJedis(DEFAULT);
}
/**
* 获取Jedis
* @param dbIndex
* @return
*/
public Jedis getJedis(Integer dbIndex) {
Jedis jedis = null;
jedis = jedisPool.getResource();
if (null == jedis){
logger.warn("Could not get a resource from the pool.");
return null;
}
try{
//如果发生异常,就选择默认的一个库
jedis.select(dbIndex);
}catch(Exception e){
jedis.select(DEFAULT);
logger.warn("Select default dataBase 0.");
}
return jedis;
}
/**
* 关闭Jedis
* @param jedis
*/
public static void closeJedis(Jedis jedis){
if (null != jedis){
jedis.close();
}
}
}
参考:
spring集成jedis简单实例
Jedis+Spring集成