使用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());
    }
}

发布了159 篇原创文章 · 获赞 69 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/u010504064/article/details/103958059