redis jedis存儲對象簡單操作,map list 自定義對象


安裝好redis,進行了基本的操作。包括對map list 和自定義對象的基本操作。筆記都在代碼注釋里,直接上代碼。

private Jedis jedis;

    @Before
    public void before() {
        jedis = new Jedis("127.0.0.1");
    }

    /**
     * 簡單添加
     */
    @Test
    public void test1() {
        String name = "name";
        String value = "qq";
        jedis.set(name, value);
        System.out.println("追加前:" + jedis.get(name)); // 追加前:qq

        // 在原有值得基礎上添加,如若之前沒有該key,則導入該key
        jedis.append(name, "ww");
        System.out.println("追加后:" + jedis.get(name)); // 追加后:qqww

        jedis.append("id", "ee");
        System.out.println("沒此key:" + jedis.get(name));
        System.out.println("get此key:" + jedis.get("id"));

    }

    /**
     * mset 是設置多個key-value值 參數(key1,value1,key2,value2,...,keyn,valuen) mget
     * 是獲取多個key所對應的value值 參數(key1,key2,key3,...,keyn) 返回的是個list
     */
    @Test
    public void test2() {
        jedis.mset("name1", "aa", "name2", "bb", "name3", "cc");
        System.out.println(jedis.mget("name1", "name2", "name3"));
    }

    /**
     * map
     */
    @Test
    public void test3() {
        Map<String, String> map = new HashMap<String, String>();
        map.put("name", "fujianchao");
        map.put("password", "123");
        map.put("age", "12");
        // 存入一個map
        jedis.hmset("user", map);

        // map key的個數
        System.out.println("map的key的個數" + jedis.hlen("user"));

        // map key
        System.out.println("map的key" + jedis.hkeys("user"));

        // map value
        System.out.println("map的value" + jedis.hvals("user"));

        // (String key, String... fields)返回值是一個list
        List<String> list = jedis.hmget("user", "age", "name");
        System.out.println("redis中key的各個 fields值:"
                + jedis.hmget("user", "age", "name") + list.size());

        // 刪除map中的某一個鍵 的值 password
        // 當然 (key, fields) 也可以是多個fields
        jedis.hdel("user", "age");

        System.out.println("刪除后map的key" + jedis.hkeys("user"));

    }

    /**
     * list
     */
    @Test
    public void test4() {

        jedis.lpush("list", "aa");
        jedis.lpush("list", "bb");
        jedis.lpush("list", "cc");
        System.out.println(jedis.lrange("list", 0, -1));
        System.out.println(jedis.lrange("list", 0, 1));
        System.out.println(jedis.lpop("list")); // 棧頂
        jedis.del("list");
    }

    /**
     * 自定義對象 User為例 id name
     * 
     * RedisTemplate 中有 序列化和反序列化
     * 如:template.getStringSerializer().serialize("name")
     */
    @Test
    public void test5() {

        User user = new User();
        user.setId(123);
        user.setName("fighter");

        // 存入一個 user對象
        jedis.set("user".getBytes(), SerializationUtil.serialize(user));

        // 獲取
        byte[] bs = jedis.get("user".getBytes());
        User desUser = (User) SerializationUtil.deserialize(bs);
        System.out.println(desUser.getId() + ":" + desUser.getName());

    }

對於自定義對象,需要進行序列化和反序列化:我這里提取出了一個工具類,

SerializationUtil.java
/**
 *  序列化就是將一個對象轉換為二進制的數據流。這樣就可以進行傳輸,或者保存到文件中。如果一個類的對象要想實現序列化,就必須實現serializable接口。在此接口中沒有任何的方法,此接口只是作為一個標識,表示本類的對象具備了序列化的能力而已。
 *  反序列化:將二進制數據流轉換成相應的對象。
 *  如果想要完成對象的序列化,則還要依靠ObjectOutputStream和ObjectInputStream,前者屬於序列化操作,而后者屬於反序列化操作。
 *  
 */

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class SerializationUtil {
    /**
     * 序列化
     * 
     * @param object
     * @return
     */
    public static byte[] serialize(Object object) {
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        try {
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(object);
            byte[] bytes = baos.toByteArray();
            return bytes;
        } catch (Exception e) {
        }
        return null;
    }

    /**
     * 反序列化
     * 
     * @param bytes
     * @return
     */
    public static Object deserialize(byte[] bytes) {
        ByteArrayInputStream bais = null;
        try {
            bais = new ByteArrayInputStream(bytes);
            ObjectInputStream ois = new ObjectInputStream(bais);
            return ois.readObject();
        } catch (Exception e) {

        }
        return null;
    }

}

還有都熟悉的User類。我只簡單實用id和name,測試,也貼一下吧

public class User implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = -1530813282496676263L;
    private Integer id;
    private String name;

    
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

昨天也進行了與spring的整合。整理一下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM