java获取redis中各种数据类型key对应的value代码简单封装

目前在做自动化测试时,设计到需要获取存储在redis中的值,总结了操作代码如下:

需要jar包:jedis-2.7.3.jar、commons-pool2-2.4.1.jar

 code如下:

package cn.migu.utils;

import java.util.Iterator;
import java.util.List;

import cn.migu.base.GlobalSettings;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
 * <Description>redis相关操作类
 * @author YanLu
 *
 */
public class RedisUtil {
	private JedisPool pool=null;
	private Jedis redis = null;
	Log4jUtil log = new Log4jUtil(this.getClass().getName());
	//构造函数,创建对象时进行初始化
	public RedisUtil() {
		if (pool == null) {
			/*
			// 池基本配置
			//JedisPoolConfig config = new JedisPoolConfig();
			// 最大连接数, 默认8个
			config.setMaxTotal(20);
			// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
			config.setMaxIdle(5);
			// 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
			config.setMaxWaitMillis(10000);
			// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
			config.setTestOnBorrow(false);
			*/
			
			//创建redis连接池
			//this.pool = new JedisPool(config,"172.18.173.188",6379);
			this.pool = new JedisPool(new JedisPoolConfig(), GlobalSettings.getProperty("redis.master.host"), Integer.parseInt(GlobalSettings.getProperty("redis.master.port")));
			//获取Jedis实例
			this.redis = pool.getResource();
			log.info("Connection to redis server sucessfully");
		}
	}
	
	/**
	 * 关闭连接
	 * @param pool
	 * @param redis
	 */
	public void quitConnection(Jedis redis) {
		if (redis != null) {
			redis.quit();
			//pool.returnResource(redis);
		}
	}
	
	/**
	 * 获取key对应的value
	 * 
	 * 说明:方法中目前只针对key数据类型为String和hash的情况作了处理,其他数据类型可根据需要进行扩展即可
	 * @param key
	 * @return
	 */
	public String getValue(String key){
		String value = null;
		try {
			if(redis == null || !redis.exists(key)){
				log.info("key:"+key+" is not found");
				quitConnection(redis);
				return value;
			}
			//获取key对应的数据类型
			String type = redis.type(key);
			log.info("key:" + key + " 的类型为:" + type);
			if(type.equals("string")){
				//get(key)方法返回key所关联的字符串值
				value = redis.get(key);
			}
			if(type.equals("hash")){
				//一下方法仅适用于list.size=1时,否者value将取集合中最后一个元素的值
				List<String> list = redis.hvals(key);//hvals(key)返回哈希表 key 中所有域的值
				//Set<String> set = redis.hkeys(key);
				Iterator<String> it=list.iterator();
				while(it.hasNext()){   
			        value = it.next();
			        log.info("value:"+value);
				}
			}
			if(type.equals("list")){
				log.info(key+"类型为list暂未处理...");
			}
			if(type.equals("set")){
				log.info(key+"类型为list暂未处理...");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			//关闭连接
			quitConnection(redis);
		}
		return value;
	}
	
</pre><p></p><p></p><p>测试代码如下:</p><p><pre name="code" class="java">package cn.migu.test;

import org.testng.annotations.Test;

import cn.migu.utils.Log4jUtil;
import cn.migu.utils.RedisUtil;

/**
 * <Description> 测试RedisUtil类
 * @author YanLu
 * 
 */
public class TestRedis {
	private Log4jUtil log = new Log4jUtil(this.getClass().getName());
	@Test
	public void testRedisUtil(){
		RedisUtil ru = new RedisUtil();
		//获取redis中对应的value值
		String value=ru.getValue("SMS_NODE_TIMES_13814528620");
		log.info(value);	
	}
  
}


展开阅读全文

没有更多推荐了,返回首页