继上一篇使用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());
}
}