redis是不能直接儲存對象的。已知道的方法有兩種:
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: