当前位置: 安卓之星 -> Java开发 -> java学习教程之redis代码示例

java学习教程之redis代码示例

作者:网络 发表于: 2017-01-06 点击: 276 次

测试代码示例:

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import redis.clients.jedis.Jedis;
import redis.util.RedisUtil;

public class test { 
	//redis ids集合的 的key名称
	public static	String KEYIDS= "SYS:IDS";
	
	// redis 对象的 的key名称  "SYS:BILL:"+"id"  获取单个对象
	public static	String OBJECTKEYID= "SYS:OBJECT:";
	
	// list 的主键名称
	public static	String MAJORKEY="id";
	
	//num 当前页数
	public static	Long num = 1l;
	//pageCount 每页条数
	public static	Long pageCount = 10l;
	
	//所有缓存3天后失效
	public static void main(String[] args) {
		//写入数据
		setDateBase();
		
		//读取列表数据
		readDateBase(num,pageCount);
		
		//读取数据单个对象
		readObjectDateBase("0");
	}

	/**
	 * 读取数据
	 */
	private static void readDateBase(Long num,Long pageCount) {
		//获取redis对象
		Jedis jedis = new Jedis("localhost");
		try {
			List<Map<String, String>> findPagedQuery = RedisUtil.findPagedQuery(KEYIDS, OBJECTKEYID, num, pageCount, jedis);
			if (findPagedQuery!=null && findPagedQuery.size()>0) {
				System.out.println("查询到当前的数据记录:");
				for (Map<String, String> map : findPagedQuery) {
					System.out.println(map.toString());
				}
			}else{
				System.out.println("当前页数据为空");
			}
		
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			jedis.close();
		}
	}

	/**
	 * 读取数据单个对象
	 */
	private static void readObjectDateBase(String key) {
		key= OBJECTKEYID+key;
		//获取redis对象
		Jedis jedis = new Jedis("localhost");
		try {
			 Map<String, String> hgetAll = jedis.hgetAll(key);
			 System.out.println("查询id为:"+key+"的对象结果:");
			 System.out.println(hgetAll.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			jedis.close();
		}
	}

	/**
	 * 存入数据源
	 */
	public static void setDateBase(){
		Jedis jedis = new Jedis("localhost");
		List<Map<String, Object>> list =new ArrayList<Map<String,Object>>();
		Date d= new Date();
		for (int i = 0; i < 20; i++) {
			Map<String, Object> map =new HashMap<String, Object>();
			map.put(MAJORKEY, i);
			map.put("name", "雄"+i);
			map.put("createDate", d);
			list.add(map);
		}
		try {
			RedisUtil.setCacheObjectInfo(list, KEYIDS, OBJECTKEYID, MAJORKEY, jedis);
			System.out.println("写入数据成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			jedis.close();
		}
	}	
}

工具类:

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.Response;

public class RedisUtil {
	//缓存时间
	public static final Integer SECONDS=3*60*60*24;

	/**
	 * 查询缓存中的数据
	 * @param jedis
	 * @param keyIds        id集合的key值
	 * @param objectKeyId   对象key值的SYS:BILL:前缀  如:"SYS:BILL:"+订单号
	 * @param num 当前页数
	 * @param pageCount  每页条数
	 * @return
	 */
	public static  List<Map<String, String>> findPagedQuery(String keyIds, String objectKeyId, Long num, Long pageCount,Jedis jedis) {
		List<Map<String, String>> list = new ArrayList<Map<String, String>>();
		 //获取管道对象
		Pipeline pipeline = jedis.pipelined();
		// 开始记录数
		Long startCount = (num - 1) * pageCount;
		List<String> lrange = jedis.lrange(keyIds, startCount, startCount + pageCount - 1);
		if (startCount.intValue() != 0 && lrange.size() != pageCount) {
			// 当缓存中数据不够时直接返回空
			return null;
		}
		// 使用pipeline 批量获取数据
		Map<String, Response<Map<String, String>>> responses = new HashMap<String, Response<Map<String, String>>>();
		for (String key : lrange) {
			String objectKey = objectKeyId + key;
			responses.put(key, pipeline.hgetAll(objectKey));
		}
		// 同步数据
		pipeline.sync();
		for (String key : responses.keySet()) {
			Map<String, String> map = new HashMap<String, String>();
			// 获取订单对象
			map = responses.get(key).get();
			list.add(map);
		}
		return list;
	}

	/**
	 * 存入对象数据
	 * @param list
	 * @param keyIds  	   redis ids集合的 的key名称
	 * @param objectKeyId  redis 对象的 的key名称
	 * @param majorKey	   list 的主键名称
	 */
	public static void setCacheObjectInfo(List<Map<String, Object>> list,String keyIds,String objectKeyId,String majorKey, Jedis jedis) {
		 //获取管道对象
		Pipeline pipeline = jedis.pipelined();
		jedis.del(keyIds);
		for (Map<String, Object> object : list) {
			//存储 对象 信息
			pipeline.rpush(keyIds, object.get(majorKey).toString());
			//获取封装好的对象数据
			Map<String, String> billMap = getEncapsulationObject(object);
			String key=objectKeyId+object.get(majorKey);
			pipeline.hmset(key, billMap);
			pipeline.expire(key, SECONDS);
		}
		pipeline.expire(keyIds, SECONDS);
		pipeline.sync();
	}

	/**
	 * 将数据转换成字符串
	 * @param object
	 * @return
	 */
	public static Map<String, String> getEncapsulationObject(Map<String, Object> object){
		Map<String, String> billMap = new HashMap<String, String>();
		for(String key:object.keySet()){
			billMap.put(key,convertString(object.get(key)));
		}
		return billMap;
	}

	/**
	 * 转换对象
	 * 当对象是一个时间类型 转成时间戳
	 * 其他类型都为字符串
	 * @param object
	 * @return
	 */
	public static String convertString(Object object){
		Object obj=object;
		if(obj == null){
			return "";
		} else if(obj instanceof Date){
			obj = ((Date)obj).getTime();
			return obj.toString();
		}
		if(isBlank(obj.toString())){
			return "";
		}   
		return obj.toString();
	}

	/**
	 * 判断字符串是否为空
	 * @param str
	 * @return
	 */
	public static boolean isBlank(String str)
	{
		if( str == null || str.length() == 0 )
			return true;
		return false;
	}
}

使用方法:

1、启动 redis-server.exe 服务
2、导入java 项目
3、运行调试

相关文章

相关文章

赶快留言冒泡

  • 评论 (0)
  • 引用通告 (0)
目前还没有任何评论.
目前还没有任何Trackbacks和Pingbacks.
吐个泡浮上去.