jedis中的两组方法

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

原文地址:https://www.cnblogs.com/yinyu/p/5310667.html