自己写的一个jedis操作模板类
jedis是java的redis客户端程序,在spring下面有专门的jar包提供了一个现成的模板类。不过,自己为了练习,需要一个超级简单的对redis操作的工具类。于是,就随便写了一个。
?
功能很简单,通过这个可以对redis进行一些常规操作,用于添加一些测试数据等,并可以熟悉一下java的模板设计模式。
?
代码不是想取代什么框架,不是重复造轮子,就是练习,高手可以直接绕道,初学者可以学习如下东西:
1.读取properties文件
2.使用内部类方式创建的单例类,天生支持多线程
3.jedis的基本使用方法
4.模板模式的使用
?
最终的使用示例:
RedisTemplate util = new RedisTemplate();/** * 在一个事务中提交多个redis操作 */util.consoleWithTrancation(new RedisTransactionCallback() {@Overridepublic void execute(Transaction t) {t.set("nname", "1111");t.set("nname1", "222");t.set("nname2", "333");}});/** * 在一个管道中处理多个redis操作. */util.consoleWithPipe(new RedisPipelineCallback() {@Overridepublic void execute(Pipeline p) {p.set("nn2ame", "1111");p.set("nn2ame1", "222");p.set("nn2ame2", "333");}});/** * 进行一个redis操作. */util.console(new RedisCallback() {@Overridepublic 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;}}
?
代码详细见附件!