import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* 操作redis数据库的工具类
* @author xin_luo
* @version 1.0 2015/6/8
*
*/
public class RedisClient {
private JedisPool jedisPool;//非切片连接池
private static RedisClient rc = null;
/**
* 私有的构造方法,单例模式必备
* @param host
* @param port
* @param timeOut
*/
private RedisClient(String host,int port,int timeOut) {
initialPool(host,port,timeOut);
}
/**
* 单例模式。获得唯一实例
* @param host
* @param port
* @param timeOut
* @return RedisClient唯一实例
*/
public synchronized static RedisClient getInstants(String host,int port,int timeOut) {
if (rc == null) {
rc = new RedisClient(host,port,timeOut);
}
return rc;
}
/**
* 初始化连接池
* @param host
* @param port
* @param timeOut
*/
private void initialPool(String host,int port,int timeOut) {
// 池基本配置
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(20);
config.setMaxIdle(5);
config.setMaxWait(1000l);
config.setTestOnBorrow(false);
jedisPool = new JedisPool(config, host,port, timeOut);
}
/**
* 重新获得连接池
* @param host
* @param port
* @param timeOut
*/
public void reSetPool(String host,int port,int timeOut) {
if (this.jedisPool == null) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(2000);
config.setMaxIdle(200);
config.setMinIdle(5);
config.setMaxWait(30000L);
this.jedisPool = new JedisPool(config, host, port, timeOut);
}
}
/**
* 保存数据
* @param key
* @param str
*/
public void saveStrValue(String key, String str) {
Jedis jedis = this.open();
jedis.set(key, str);
close(jedis);
}
/**
* 获得数据
* @param key
* @return value
*/
public String getStrValue(String key) {
Jedis jedis = this.open();
String string = jedis.get(key);
close(jedis);
return string;
}
/**
* 删除数据
* @param key
* @return
*/
public Long delStr(String key) {
Jedis jedis = this.open();
Long reLong = jedis.del(key);
close(jedis);
return reLong;
}
/**
* 对key的模糊查询
* @param keys 正则表达式
* @return 查到的结果集
*/
public List<String> getKeys(String keys) {
List<String> results = new ArrayList<String>();
Jedis jedis = open();
Set<String> result = jedis.keys(keys);
for (String r : result) {
results.add(r);
}
return results;
}
/**
* 获得Jedis对象
* @return
*/
public Jedis open() {
return this.jedisPool.getResource();
}
/**
* 关闭Jedis
* @param jedis
*/
public void close(Jedis jedis){
this.jedisPool.returnResource(jedis);
}
}