redis中序列化对象的时候要注意.
jedis中有两组方法:
1,key为string类型,value也为string类型.(必须的)
2,key为字节数组,那么valeu也会转成字节数组,(必须的)
key与value一一对应这一点要注意.
体会:在学习一个新的东西的时候,可以api挨着一个一个调用.对比看他是什么情况.
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.EOFException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.HashMap; import java.util.List; import redis.clients.jedis.Jedis; public class Test05 { public static void main(String[] args) throws Exception { Jedis jedis = new Jedis("localhost"); HashMap<String,Object> map = new HashMap<String, Object>(); map.put("我是", "中国人"); map.put("你们", "外国人"); //这个方法很特别:它的key呀,不是String,而是一个数组,而这个key对应的value也是一个字节数组 jedis.rpushx("keyName".getBytes(),writeObject(map) ); //这个方法也很特点:它返回来的vlaue的list集合都是字节数组 List<byte[]> list=jedis.lrange("keyName".getBytes(), 0, -1); //这样得到就是一个String List<String> list2=jedis.lrange("keyName", 0, -1); } /** * 把对象转成字节数组. * 把一个对象,写入到一个字节数组流中; * 然后从这个字节数组流,得到字节数组. */ public static byte[] writeObject(Object o) throws Exception { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(o); oos.flush(); oos.close(); bos.close(); return bos.toByteArray(); } /** * 把字节数组,转成一个对象. */ public static Object readObject(byte[] object) throws Exception{ ByteArrayInputStream bis = new ByteArrayInputStream(object); ObjectInputStream ois = new ObjectInputStream(bis); Object o = null; try { o = ois.readObject(); } catch(EOFException e) { System.err.print("read finished"); } bis.close(); ois.close(); return o; } }
2016年3月23日13:06:30