package com.mybatis.plus;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.HashSet;
import java.util.Set;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestClass {
@Autowired
private RedisTemplate redisTemplate;
/**
* zset(Sorted Set 有序集合)也是 string 类型元素的集合,且不允许重复的成员。每个元素都会关联一个 double 类型的分数。可以通过分数将该集合中的成员从小到大进行排序。
*
* zset 的成员是唯一的,但权重参数分数(score)却可以重复。集合中的元素能够按 score 进行排列。它可以用来做排行榜应用、取TOP/N、延时任务、范围查找等。
*
* 使用redisTemplate.opsForZSet() 操作ZSet集合
* Boolean add(K var1, V var2, double var3);
* Long add(K key, Set> tuples) 增加一个有序集合
*
* Long remove(K key, Object... values) 从有序集合中移除一个或者多个元素
*
* Set range(K KET, long var2, long var4); 查看ZSet集合中的元素
*
* Long rank(K key, Object value) 返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列
*
* rank 返回有序集中指定成员的排名, 其中有序集成员按分数值递增(从小到大)顺序排列
*
* range方法:通过索引区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列。
*
* rangeByScore方法:通过分数区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列。
*
* count方法:通过分数返回有序集合指定区间内的成员个数。
*
* size方法:获取有序集合的成员数。
*/
@Test
public void test5(){
redisTemplate.opsForZSet().add("StudentZSet","99",9.9);
redisTemplate.opsForZSet().add("StudentZSet","80",8.0);
redisTemplate.opsForZSet().add("StudentZSet","69",6.9);
redisTemplate.opsForZSet().add("StudentZSet","52",5.4);
redisTemplate.opsForZSet().add("StudentZSet","32",3.4);
redisTemplate.opsForZSet().add("StudentZSet","23",3.9);
System.out.println(redisTemplate.opsForZSet().range("StudentZSet",0,-1));
// 移除ZSet中的一个或多个元素
redisTemplate.opsForZSet().remove("StudentZSet","69");
System.out.println("移除ZSet中的一个或多个元素:"+redisTemplate.opsForZSet().range("StudentZSet",0,-1));
//通过分数区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列。
System.out.println("通过分数区间返回有序集合成指定区间内的成员:"+redisTemplate.opsForZSet().rangeByScore("StudentZSet", 3, 8));
System.out.println("分数在4至8区间内的成员个数:" + redisTemplate.opsForZSet().count("StudentZSet", 4, 8));
// 遍历 zset
Cursor> cursor = redisTemplate.opsForZSet().scan("StudentZSet", ScanOptions.NONE);
while (cursor.hasNext()){
ZSetOperations.TypedTuple next = cursor.next();
//System.out.println(next); // 打印的对象地址 org.springframework.data.redis.core.DefaultTypedTuple@35698b75
System.out.println(next.getValue() + " 的分数值:" + next.getScore());
}
}
}