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