Redis关于对象的储存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XIAFYY/article/details/60574404
redis是不能直接储存对象的。已知道的方法有两种:

============================================================

FastJson下载地址:http://download.csdn.net/detail/xiafyy/9781479

FastJson使用教程:http://blog.csdn.net/djun100/article/details/24237371


1.把对象序列化存进去,取出来的时候再反序列化成对象
package com.gametech.utils;  
  
import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
import java.io.ObjectInputStream;  
import java.io.ObjectOutputStream;  
  
import org.apache.log4j.Logger;  
  
public class SerializeUtil {  
  
    static Logger log = Logger.getLogger(SerializeUtil.class);  
    /** 
     *  
     * <p>Title: ObjTOSerialize</p> 
     * <p>Description: 序列化一个对象</p> 
     * @param obj 
     * @return 
     * @author guangshuai.wang 
     */  
    public static byte[] ObjTOSerialize(Object obj){  
        ObjectOutputStream oos = null;  
        ByteArrayOutputStream byteOut = null;  
        try{  
            byteOut = new ByteArrayOutputStream();  
            oos = new ObjectOutputStream(byteOut);  
            oos.writeObject(obj);  
            byte[] bytes = byteOut.toByteArray();  
            return bytes;  
        }catch (Exception e) {  
            log.error("对象序列化失败");  
        }  
        return null;  
    }  
    /** 
     *  
     * <p>Title: unSerialize</p> 
     * <p>Description: 反序列化</p> 
     * @param bytes 
     * @return 
     * @author guangshuai.wang 
     */  
    public static Object unSerialize(byte[] bytes){  
        ByteArrayInputStream in = null;  
        try{  
            in = new ByteArrayInputStream(bytes);  
            ObjectInputStream objIn = new ObjectInputStream(in);  
            return objIn.readObject();  
        }catch (Exception e) {  
            log.error("反序列化失败");  
        }  
        return null;  
    }  

} 

2.使用jedis.set(byte[], byte[])


通过这个API,很显然我们能够实现


jedis.set(String key, Object value)


jedis.set(String key, List<M> values)


我们需要关注的就是在cache的时候将Object和List对象转换成字节数组并且需要提供将字节数组转换成对象返回。

如果需要取对象的时候使用jedis.get:

======================================================================================================

第一种方法如果自己封装工具类在频繁的操作的时候会非常消耗资源,那么阿里提供了FastJson工具非常的好用。

//下面是FastJson的简介:常用的方法!  
//  Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。  
//  public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray   
//  public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject      
//  public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean   
//  public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray   
//  public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合   
//  public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本   
//  public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本   
//  public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray(和上面方法的区别是返回值是不一样



猜你喜欢

转载自blog.csdn.net/XIAFYY/article/details/60574404