1. 程式人生 > >redis 學習之一(資料結構)

redis 學習之一(資料結構)

通用方法            incr decr incrby decrby

redis string方法    get set mset mget setex expire

儲存物件的兩種方式
 //儲存序列化之後的物件
        jedis.set("user:liudehua:obj".getBytes(), getBytesByProduct(person) );
        //jedis.set("user:liudehua:obj".getBytes(), "fasdf"); 不能用這種形式
        byte[] productBytes = jedis.get("user:liudehua:obj".getBytes());
        Person pByte = getProductByBytes(productBytes);
        System.out.println(pByte.getName()+"  " +pByte.getAge());

        //儲存Json化之後的物件
        jedis.set("user:liudehua:json", new Gson().toJson(person));
        String personJson = jedis.get("user:liudehua:json");
        Person pjson = new Gson().fromJson(personJson, Person.class);
        System.out.println(pjson.getName()+"  "+ pjson.getAge());

應用場景:儲存物件的時候

redis map 中的所有方法都以h開頭  hgetALL hkeys hvals hincrBy hdel

應用場景:購物車

redis list    中只有 lrange這個方法沒有 rrange這個方法不要想多了

insert 也只有 linsert這個方法 

jedis.linsert("櫃檯1", BinaryClient.LIST_POSITION.AFTER, "鳩摩智", "慕容復");
        jedis.linsert("櫃檯1", BinaryClient.LIST_POSITION.BEFORE,"鳩摩智","令狐沖");
        List<String> list1 = jedis.lrange("櫃檯1", 0, -1);
        for (String name : list1) {
            System.out.print(name + "  ");
        }
        System.out.println();

trim也是隻有個 ltrim  它是用來修剪得

String res = jedis.ltrim("櫃檯1", 0, 2);  (0,2)是保留下來的資料,其他的都被修剪了。
        if ("OK".equals(res)) {
            for (String name : jedis.lrange("櫃檯1", 0, -1)) {
                System.out.print(name + "  ");
            }
        }

lpush rpush 倒是有的

相對應的 lpop rpop 也是有的

應用場景:網頁爬蟲的時候

redis set 都是以s開頭 map是以h開頭不是m開頭,m開頭的是string的mget mset

sadd方法:

 jedis.sadd("biwu:dengji", daxias);  //daxias是一個數組,可以直接往set裡面新增陣列

和sadd配對的是smembers方法 

 Set<String> daxiaSet = jedis.smembers("biwu:dengji");
        for (String name : daxiaSet) {
            System.out.print(name + " ");  //set集合的特點:無序、無重複元素
        }
        System.out.println();

sismember 判斷是否有存在元素

scard 計算redis的set中有多少個元素

   //計算兩個Set之間的交集
        Set<String> users = jedis.sinter("biwu:dengji", "guoji:dengji");
        for (String name : users) {
            System.out.print(name + " ");
        }
        System.out.println();



        //計算兩個Set之間的並集
        users = jedis.sunion("biwu:dengji", "guoji:dengji");
        for (String name : users) {
            System.out.print(name + " ");
        }
        System.out.println();
        System.out.println("井中月出來了");



        //計算兩個集合的差集
        users = jedis.sdiff("biwu:dengji", "guoji:dengji");
        for (String name : users) {
            System.out.print(name + " ");
        }
        System.out.println();

        System.out.println();

        //將兩個集合計算出來的差集儲存起來,升級為超級Vip
        jedis.sdiffstore("vipdaxia","biwu:dengji", "guoji:dengji");
        for (String name : jedis.smembers("vipdaxia")) {
            System.out.print(name + " ");
        }

應用場景:計算轉化率的時候

redis orderset 方法都是以z開頭的

    jedis.zadd("比武成績", 10, "喬峰");
    jedis.zadd("比武成績", 5, "王重陽");
    jedis.zadd("比武成績", 7, "虛竹");
    jedis.zadd("比武成績", 2, "王語嫣");
    jedis.zadd("比武成績", 5, "段譽");
    jedis.zadd("比武成績", 4, "峨眉師太");
    jedis.zadd("比武成績", 20, "張三丰");
    //獲取sortSet中所有的元素
Set<String> names = jedis.zrange("比武成績", 0, -1);
    for (String name : names) {
        System.out.println(name + "        排名: "
//列印使用者升序排行
+ jedis.zrank("比武成績", name) + "           贏的場次: "
//列印使用者的比武成績
+ jedis.zscore("比武成績", name));
    }
    System.out.println("==============================");

    names = jedis.zrevrange("比武成績", 0, -1);
    for (String name : names) {
        System.out.println(name + "         "
+ jedis.zrevrank("比武成績", name) + "            "
+ jedis.zscore("比武成績", name));
    }
    System.out.println("==============================");

    //修改使用者的分數
jedis.zincrby("比武成績",100,"王語嫣");
    names = jedis.zrevrange("比武成績", 0, -1);
    for (String name : names) {
        System.out.println(name + "         "
+ jedis.zrevrank("比武成績", name) + "            "
+ jedis.zscore("比武成績", name));
    }
}