jedis是java的redis客户端程序,在spring下面有专门的jar包提供了一个现成的模板类。不过,自己为了练习,需要一个超级简单的对redis操作的工具类。于是,就随便写了一个。
功能很简单,通过这个可以对redis进行一些常规操作,用于添加一些测试数据等,并可以熟悉一下java的模板设计模式。
代码不是想取代什么框架,不是重复造轮子,就是练习,高手可以直接绕道,初学者可以学习如下东西:
1.读取properties文件
2.使用内部类方式创建的单例类,天生支持多线程
3.jedis的基本使用方法
4.模板模式的使用
最终的使用示例:
RedisTemplate util = new RedisTemplate();
/**
* 在一个事务中提交多个redis操作
*/
util.consoleWithTrancation(new RedisTransactionCallback() {
@Override
public void execute(Transaction t) {
t.set("nname", "1111");
t.set("nname1", "222");
t.set("nname2", "333");
}
});
/**
* 在一个管道中处理多个redis操作.
*/
util.consoleWithPipe(new RedisPipelineCallback() {
@Override
public void execute(Pipeline p) {
p.set("nn2ame", "1111");
p.set("nn2ame1", "222");
p.set("nn2ame2", "333");
}
});
/**
* 进行一个redis操作.
*/
util.console(new RedisCallback() {
@Override
public void execute(Jedis j) {
j.set("haha", "还是是多少多少看");
}
});
核心的jedis操作封装类,包括创建一个jedispool对象:
package brightmoon.redis;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import brightmoon.util.Util;
/**
* redis处理工具类. 包含读取配置文件,初始化jedispool,关闭连接等步骤.
*
* @author lsq
*
*/
public class RedisUtil {
protected Log log = LogFactory.getLog(this.getClass().getName());
private Properties pros;
private RedisUtil() {
init();
initialPool();
}
private static class SingletonHolder {
private static RedisUtil instance = new RedisUtil();
}
public static RedisUtil getInstance() {
return SingletonHolder.instance;
}
private String host;
private String port;
private String maxActive;
private String maxIdle;
private String testOnBorrow;
private String maxWait;
private JedisPool jedisPool;
private void init() {
InputStream in = null;
try {
pros = new Properties();
in = this.getClass().getResourceAsStream("/redis.properties");
pros.load(in);
host = pros.getProperty("host");
port = pros.getProperty("port");
maxActive = Util.notBlank(pros.getProperty("maxActive"), "20");
maxWait = Util.notBlank(pros.getProperty("maxWait"), "5");
maxIdle = Util.notBlank(pros.getProperty("maxIdle"), "1000");
testOnBorrow = Util.notBlank(pros.getProperty("testOnBorrow"),
"false");
} catch (Exception ex) {
log.error("没有找到redis配置文件", ex);
} finally {
if (in != null)
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void initialPool() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(Integer.parseInt(maxActive));
config.setMaxIdle(Integer.parseInt(maxIdle));
config.setMaxWait(Integer.parseInt(maxWait));
config.setTestOnBorrow("true".equals(testOnBorrow));
jedisPool = new JedisPool(config, host, Integer.parseInt(port));
}
public Jedis getJedis() {
return jedisPool.getResource();
}
/**
* 释放被损坏的jedis.
*
* @param jd
*/
public void releaseBrokenJedis(Jedis jd) {
jedisPool.returnBrokenResource(jd);
jd = null;
}
/**
* 从连接池中释放jedis
*
* @param jd
*/
public void releaseJedis(Jedis jd) {
jedisPool.returnResource(jd);
jd = null;
}
}
代码详细见附件!