Radis数据库使用


项目中除了会使用到常见的关系数据库Mysql外,还会使用到Radis数据库


问题:什么样的项目情景下,会使用Radis非关系数据库?

解决

      如果项目中有获取和更新操作很频繁的数据,同时这些数据的时效性很强,可是使用Radis数据库。

      Radis数据库直接将数据存放在计算机内存中,读取访问数据的速度会非常得快。所以我们将需要经常操作的数据放到Radis中,可以大大提高程序的运行效率。

     比如:大众物流项目中,乘客下的订单信息。订单刚生成时信息很不完善,需要经过人工处理等一系列后台操作(不断获取此订单信息,同时更新订单对应字段的信息),才会最终插入关系型数据库中,比如Mysql数据库中去。此时就可以将信息不完善的订单信息放到Radis中 ,待到信息完善后最终放到Mysql中。

Java项目中使用

RadisUtil.java源代码:

package com.visionet.core.redis;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import com.visionet.core.util.ResourceUtil;

/**
 * @author zb
 *
 */
public class RedisUtil {
	private static JedisPool jedisPool = null;

	/**
	 * 初始化Redis连接池
	 */
	static {
		try {
			String redisIp = ResourceUtil.getValueBykey("base", "redis.ip");
			String auth = ResourceUtil.getValueBykey("base", "redis.auth");
			String port = ResourceUtil.getValueBykey("base", "redis.port");
			// 创建jedis池配置实例
			JedisPoolConfig config = new JedisPoolConfig();
			// 设置池配置项值
			config.setMaxActive(500);
			config.setMaxIdle(5);
			config.setMaxWait(1000 * 100);
			config.setTestOnBorrow(true);
			jedisPool = new JedisPool(config, redisIp, Integer.parseInt(port), 10000, auth);
//			jedisPool = new JedisPool(config, redisIp, 6379, 10000, auth);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取Jedis实例
	 * 
	 * @return
	 */
	public synchronized static Jedis getJedis() {
		try {
			if (jedisPool != null) {

				Jedis resource = jedisPool.getResource();
				// resource.auth(auth);
				return resource;
			} else {
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 释放jedis资源
	 * 
	 * @param jedis
	 */
	public static void returnResource(final Jedis jedis) {
		if (jedis != null) {
			jedisPool.returnResource(jedis);
		}
	}

	/**
	 * Redis保存字符串
	 * 
	 * @param key
	 * @param value
	 */
	public static void setData(String key, String value,Integer seconds) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			
			jedis.set(key, value);
			if(seconds!=null){
				jedis.expire(key, seconds);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
	}

	/**
	 * Redis保存MAP
	 * 
	 * @param key
	 * @param value
	 */
	public static void setMapData(String key, Map<String, String> value ,Integer seconds) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.hmset(key, value);
			if(seconds!=null){
				jedis.expire(key, seconds);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
	}

	/**
	 * 获取字符串
	 * 
	 * @param key
	 * @return
	 */
	public static String getData(String key) {
		Jedis jedis = null;
		String ret =  "";
		try {
			jedis = jedisPool.getResource();
			ret=jedis.get(key);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
		return ret;
	}
	
	/**
	 * 获取字符串
	 * 
	 * @param key
	 * @return
	 */
	public static Integer getDataSeconds(String key) {
		Jedis jedis = null;
		Integer ret = 0;
		try {
			jedis = jedisPool.getResource();
			ret=jedis.ttl(key).intValue();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
		return ret;
	}
	/**
	 * 获取MAP
	 * 
	 * @param key
	 * @param field
	 * @return
	 */
	public static String getData(String key, String field) {
		Jedis jedis = null;
		String ret =  "";
		try {
			jedis = jedisPool.getResource();
			ret=jedis.hget(key, field);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
		return ret;
		
	}

	/**
	 * 删除数据
	 * 
	 * @param key
	 */
	public static Long delData(String key) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			return jedis.del(key);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
		return 0L;
	}

	/**
	 * 保存对象
	 * 
	 * @param key
	 * @param value
	 */
	public static void setObjectData(String key, Object value,Integer seconds) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.set(key.getBytes(), SerializeUtil.serialize(value));
			if(seconds!=null){
				jedis.expire(key, seconds);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
		
	}

	/**
	 * 保存对象LIST 在list的队尾插入
	 * 
	 * @param key
	 * @param value
	 */
	public static void setObjectListData(String key, Object value) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.rpush(key.getBytes(), SerializeUtil.serialize(value));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
	}

	/**
	 * 删除list中的元素()
	 * 
	 * @param key
	 *            list的key
	 * @param begin
	 *            需要保留的数据的开始下标
	 * @param end
	 *            需要保留的数据的结束下标 -1为队尾
	 */
	public static void ltrimListDatta(String key, int begin, int end) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.ltrim(key.getBytes(), begin, end);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
		
	}

	/**
	 * 获取对象
	 * 
	 * @param key
	 * @return
	 */
	public static Object getObjectData(String key) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			byte[] bytes = jedis.get(key.getBytes());
			Object ob = null;
			ob = SerializeUtil.unserialize(bytes);
			return ob;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
		return null;
	}

	/**
	 * 获取对象列表
	 * 
	 * @param key
	 * @return
	 */
	public static List<Object> getObjectListData(String key) {
		List<Object> os = new ArrayList<Object>();
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			List<byte[]> bytes = jedis.lrange(key.getBytes(), 0, -1);
			for (byte[] bs : bytes) {
				os.add(SerializeUtil.unserialize(bs));
			}
			return os;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
		return os;
	}

	/**
	 * 删除对象列表
	 *   需重写对象的equals方法
	 * @param key
	 * @return
	 */
	public static void lrem(String key,Object value) {
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.lrem(key.getBytes(), -1, SerializeUtil.serialize(value));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
	}
	
	public static Set<String> getKeys(String byKey){
		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			Set<String> keys = jedis.keys(byKey);
			return keys;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			jedisPool.returnResource(jedis);
		}
		return null;
	}
	public static void main(String[] args) {
//		Jedis jedis = jedisPool.getResource();
//		jedis.del("carCoor*".getBytes());
//		CarLbsDto lbs = new CarLbsDto();
//		lbs.setPhone("1234");
//		setObjectListData("LBSTEST", lbs);
//		CarLbsDto lbs1 = new CarLbsDto();
//		lbs1.setPhone("12345");
//		setObjectListData("LBSTEST", lbs1);
//		CarLbsDto lbs2 = new CarLbsDto();
//		lbs2.setPhone("123456");
//		setObjectListData("LBSTEST", lbs2);
//		
//		List<Object> os = getObjectListData("carsLBS-117,111");
//		for (Object object : os) {
//			CarLbsDto cl = (CarLbsDto) object;
//			System.out.println(cl);
//		}
////		CarLbsDto car = new CarLbsDto();
////		car.setLat(31.216384);
////		car.setLon(121.436906);
////		car.setPhone("18235139790");
////		car.setCarType("0.6T");
////		car.setUserType("0");
////		car.setName("shuaige");
////		car.setCarNum("沪L851631");
////		car.setIsWork(null);
////		lrem("carsLBS-117,111", car);
//		LBSUtil.removeCoor("18235139790");
//		System.out.println("删除后");
//		List<Object> os1 = getObjectListData("carsLBS-127,96");
//		for (Object object : os1) {
//			CarLbsDto cl = (CarLbsDto) object;
//			System.out.println(cl);
//		}
//		sysogetKeys("carCoor-*");
//		System.out.println(delData("carCoor-1234-object"));
		setData("carCoor-1234-object", "123", 60*60);
	}
}


相关内容推荐