使用jedis連接redis-cluster進行zset數據結構api演示

繼上一篇使用jedis連接redis-cluster進行hash數據結構api演示
之後的第四章節。本章內容講解使用jedis連接redis-cluster進行zset數據結構api演示。

package com.coderman.jedis.clusterdemo;

import com.alibaba.fastjson.JSON;
import org.junit.Test;
import redis.clients.jedis.ScanResult;
import redis.clients.jedis.Tuple;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Set;

/**
 * @Author fanchunshuai
 * @Date 2019/12/30 18
 * @Description:
 * redis的sorted set api使用
 */
public class ZSetAPITest extends ClusterTest{
    //某某大學大一一班
    private static final String STUDENT = "XXDX:01:01";
    private Random random = new Random();

    /**
     * 初始化10000學生的分數
     */
    @Test
    public void testAdd(){
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            String key = STUDENT;
            Long res = cluster.zadd(key,random.nextInt(100),key +i);
            System.out.println("res = "+res);
        }
    }

    /**
     * 獲取zset集合的數量
     */
    @Test
    public void testGetCount(){
        String key = STUDENT;
        //獲取zset裏的集合數量
        Long count = cluster.zcard(key);
        System.out.println("count = "+count);
    }


    /**
     * 獲取zset中指定成員的分數
     */
    @Test
    public void testGetZscore(){
        String key = STUDENT;
        //獲取zset裏的集合數量
        String member = key + "5";
        Double score = cluster.zscore(key,member);
        System.out.println("score = " + score);

        String member2 = key + "10";
        Double score2 = cluster.zscore(key,member2);
        System.out.println("score2 = " + score2);
    }


    /**
     * 根據分數範圍返回對應的集合
     */
    @Test
    public void testGetZscoreByRange(){
        String key = STUDENT;
        //這裏返回的集合是不帶分數的,因此看不到每個集合內每個元素的排名的
        Set<String> memberSetUp90 = cluster.zrangeByScore(key,90,100);
        System.out.println(JSON.toJSONString(memberSetUp90));
        Set<String> memberSetUp80 = cluster.zrangeByScore(key,80,90);
        System.out.println(JSON.toJSONString(memberSetUp80));
        Set<String> memberSetUp70 = cluster.zrangeByScore(key,70,80);
        System.out.println(JSON.toJSONString(memberSetUp70));


        ////////////////////////////////////////////////////
        //此接口提供分數範圍內查找並返回分數 注意上下界都包含
        Set<Tuple> memberSetTuple90 = cluster.zrangeByScoreWithScores(key,90,100);
        System.out.println(JSON.toJSONString(memberSetTuple90));
        Set<Tuple> memberSetTuple80 = cluster.zrangeByScoreWithScores(key,80,90);
        System.out.println(JSON.toJSONString(memberSetTuple80));
    }

    /**
     * 根據分數範圍進行排序,然後倒排
     */
    @Test
    public void testGetRevZscoreByRange(){
        String key = STUDENT;
        //獲取zset裏的集合數量
        //這裏返回的集合是不帶分數的,因此看不到每個集合內每個元素的排名的
        //注意這裏的參數
        Set<String> memberSetUp90 = cluster.zrevrangeByScore(key,100,90);
        System.out.println(JSON.toJSONString(memberSetUp90));
        //這裏返回的集合是帶分數的
        Set<Tuple> memberSetUp902 = cluster.zrevrangeByScoreWithScores(key,100,90);
        System.out.println(JSON.toJSONString(memberSetUp902));
    }


    /**
     * zset的刪除
     */
    @Test
    public void testDeleteByScore(){
        String key = STUDENT;
        //根據成員刪除
        Long count = cluster.zrem(key,new String[]{key+5,key+6});
        System.out.println("count = "+count);

        //根據分數範圍刪除
        Long count2 = cluster.zremrangeByScore(key,0,20);
        System.out.println("count2 = "+count2);

        //根據排名刪除
        Long count3 = cluster.zremrangeByRank(key,8000L,10000L);
        System.out.println("count3 = "+count3);

    }



    /**
     * zset的更新
     */
    @Test
    public void testZsetUpdate(){
        String key = STUDENT;

        Set<Tuple> memberSetTuple80 = cluster.zrangeByScoreWithScores(key,80,90);
        System.out.println(JSON.toJSONString(memberSetTuple80));
        memberSetTuple80.stream().forEach(tuple -> {
            //給每個成員加1分
            cluster.zincrby(key,1.0d,tuple.getElement());
        });
        Set<Tuple> memberSetTuple802 = cluster.zrangeByScoreWithScores(key,80,90);
        System.out.println(JSON.toJSONString(memberSetTuple802));

    }


    /**
     * zset的遍歷
     */
    @Test
    public void testZsetIterator(){
        String key = STUDENT;

        ScanResult<Tuple> memberSetTuple80 = cluster.zscan(key,"0");
        List<Tuple>  tupleList = memberSetTuple80.getResult();
        System.out.println(memberSetTuple80.getResult().size());
    }
}

發佈了174 篇原創文章 · 獲贊 75 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章