论坛首页 Java企业应用论坛

自己写的一个jedis操作模板类

浏览 5414 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-07-15  

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;
	}
}

 

代码详细见附件!

   发表时间:2013-07-22  
代码贴得不全啊,连接池看起来是apache的object pool 写的啊.
0 请登录后投票
   发表时间:2013-07-22   最后修改:2013-07-22
Spring Data好像也有一套RedisTemplate
http://static.springsource.org/spring-data/data-redis/docs/current/reference/html/redis.html#redis:template
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics