Redis缓存系统(1)Java-Jedis操作Redis,基本操作以及 实现对象保存

Redis缓存系统(一)Java-Jedis操作Redis,基本操作以及 实现对象保存


源代码下载: http://download.csdn.net/detail/jiangtao_st/7623113


1、Maven配置

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.5.0</version>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.1.41</version>
</dependency></span>


2、Properties 配置文件

  redis.pool.maxActive=100

  redis.pool.maxIdle=20

  redis.pool.maxWait=3000


  redis.ip=localhost

  redis.port=6379


3、代码具体实现的Client

/**
 * 
 * <p>
 * 	Redis客户端访问
 * </p>
 * 
 * @author 卓轩
 * @创建时间:2014年7月11日
 * @version: V1.0
 */
public class RedisClient {
	
	public  static  JedisPool jedisPool; // 池化管理jedis链接池
	
	static {
		
		//读取相关的配置
		ResourceBundle resourceBundle = ResourceBundle.getBundle("redis");
		int maxActive = Integer.parseInt(resourceBundle.getString("redis.pool.maxActive"));
		int maxIdle = Integer.parseInt(resourceBundle.getString("redis.pool.maxIdle"));
		int maxWait = Integer.parseInt(resourceBundle.getString("redis.pool.maxWait"));
		
		String ip = resourceBundle.getString("redis.ip");
		int port = Integer.parseInt(resourceBundle.getString("redis.port"));
		
		JedisPoolConfig config = new JedisPoolConfig();  
		//设置最大连接数
		config.setMaxTotal(maxActive);
		//设置最大空闲数
		config.setMaxIdle(maxIdle);
		//设置超时时间
		config.setMaxWaitMillis(maxWait);
		
		//初始化连接池
		jedisPool = new JedisPool(config, ip, port); 
	}
	
	/**
	 * 向缓存中设置字符串内容
	 * @param key key
	 * @param value value
	 * @return
	 * @throws Exception
	 */
	public static boolean  set(String key,String value) throws Exception{
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.set(key, value);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally{
			jedisPool.returnResource(jedis);
		}
	}
	
	/**
	 * 向缓存中设置对象
	 * @param key 
	 * @param value
	 * @return
	 */
	public static boolean  set(String key,Object value){
		Jedis jedis = null;
		try {
			String objectJson = JSON.toJSONString(value);
			jedis = jedisPool.getResource();
			jedis.set(key, objectJson);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally{
			jedisPool.returnResource(jedis);
		}
	}
	
	/**
	 * 删除缓存中得对象,根据key
	 * @param key
	 * @return
	 */
	public static boolean del(String key){
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.del(key);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally{
			jedisPool.returnResource(jedis);
		}
	}
	
	/**
	 * 根据key 获取内容
	 * @param key
	 * @return
	 */
	public static Object get(String key){
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			Object value = jedis.get(key);
			return value;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally{
			jedisPool.returnResource(jedis);
		}
	}
	

	/**
	 * 根据key 获取对象
	 * @param key
	 * @return
	 */
	public static <T> T get(String key,Class<T> clazz){
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			String value = jedis.get(key);
			return JSON.parseObject(value, clazz);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}finally{
			jedisPool.returnResource(jedis);
		}
	}


}



4、Sharding 分片管理

/**
 * 
 * <p>
 * Sharding Redis Client 工具类
 * </p>
 * 
 * @author 卓轩
 * @创建时间:2014年7月11日
 * @version: V1.0
 */
public class ShardingRedisClient {

	private static ShardedJedisPool shardedJedisPool;

	static {
		// 读取相关的配置
		ResourceBundle resourceBundle = ResourceBundle.getBundle("redis");
		int maxActive = Integer.parseInt(resourceBundle.getString("redis.pool.maxActive"));
		int maxIdle = Integer.parseInt(resourceBundle.getString("redis.pool.maxIdle"));
		int maxWait = Integer.parseInt(resourceBundle.getString("redis.pool.maxWait"));

		String ip = resourceBundle.getString("redis.ip");
		int port = Integer.parseInt(resourceBundle.getString("redis.port"));
		
		//设置配置
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxTotal(maxActive);
		config.setMaxIdle(maxIdle);
		config.setMaxWaitMillis(maxWait);
		
		//设置分片元素信息
		JedisShardInfo shardInfo1 = new JedisShardInfo(ip,port);
		JedisShardInfo shardInfo2 = new JedisShardInfo(ip,port);
		List<JedisShardInfo> list = new ArrayList<JedisShardInfo>();
		list.add(shardInfo1);
		list.add(shardInfo2);
		shardedJedisPool = new ShardedJedisPool(config, list);
	}

	
	/**
	 * 向缓存中设置字符串内容
	 * @param key key
	 * @param value value
	 * @return
	 * @throws Exception
	 */
	public static boolean  set(String key,String value) throws Exception{
		ShardedJedis jedis = null;
		try {
			jedis = shardedJedisPool.getResource();
			jedis.set(key, value);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally{
			shardedJedisPool.returnResource(jedis);
		}
	}
	
	/**
	 * 向缓存中设置对象
	 * @param key 
	 * @param value
	 * @return
	 */
	public static boolean  set(String key,Object value){
		ShardedJedis jedis = null;
		try {
			String objectJson = JSON.toJSONString(value);
			jedis = shardedJedisPool.getResource();
			jedis.set(key, objectJson);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally{
			shardedJedisPool.returnResource(jedis);
		}
	}
	
	/**
	 * 删除缓存中得对象,根据key
	 * @param key
	 * @return
	 */
	public static boolean del(String key){
		ShardedJedis jedis = null;
		try {
			jedis = shardedJedisPool.getResource();
			jedis.del(key);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally{
			shardedJedisPool.returnResource(jedis);
		}
	}
	
	/**
	 * 根据key 获取内容
	 * @param key
	 * @return
	 */
	public static Object get(String key){
		ShardedJedis jedis = null;
		try {
			jedis = shardedJedisPool.getResource();
			Object value = jedis.get(key);
			return value;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}finally{
			shardedJedisPool.returnResource(jedis);
		}
	}
	

	/**
	 * 根据key 获取对象
	 * @param key
	 * @return
	 */
	public static <T> T get(String key,Class<T> clazz){
		ShardedJedis jedis = null;
		try {
			jedis = shardedJedisPool.getResource();
			String value = jedis.get(key);
			return JSON.parseObject(value, clazz);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}finally{
			shardedJedisPool.returnResource(jedis);
		}
	}
	
}


5、 单元测试、保存对象、写入对象


/**
 * 
 * <p>
 *  测试独立redis 客户端
 * </p>
 * 
 * @author 卓轩
 * @创建时间:2014年7月11日
 * @version: V1.0
 */
public class SimpleClient {
	
	@Test
	public void userCache(){
		
		//向缓存中保存对象
		UserDO zhuoxuan = new UserDO();
		zhuoxuan.setUserId(113445);
		zhuoxuan.setSex(1);
		zhuoxuan.setUname("卓轩");
		zhuoxuan.setUnick("zhuoxuan");
		zhuoxuan.setEmail("zhuoxuan@mogujie.com");
		//调用方法处理
		boolean reusltCache = RedisClient.set("zhuoxuan", zhuoxuan);
		if (reusltCache) {
			System.out.println("向缓存中保存对象成功。");
		}else{
			System.out.println("向缓存中保存对象失败。");
		}
	}
	
	
	@Test
	public void getUserInfo(){
		
		UserDO zhuoxuan = RedisClient.get("zhuoxuan",UserDO.class);
		if(zhuoxuan != null){
			System.out.println("从缓存中获取的对象," + zhuoxuan.getUname() + "@" + zhuoxuan.getEmail());
		}
		
	}
	
	

}