Redis Zset
Zset是Redis五大数据类型之一。
Zset集合和Set集合非常相似,不同之处在于:Zset集合是有序的,而Set集合是无序的。
Zset集合有序,是因为集合中的每个成员都有一个评分(score),这个评分(评分可以重复)用于按照从低到高的方式排序。
Zset的插入语法为:
redisTemplate.opsForZSet().add("value",data,score);
其中,存在第一个参数表示数据的Value,第二个表示数据本身,第三个表示数据的score用于Zset对数据进行排序。
其主要提供两种查询方式:
1.根据排序值(score)升序排序
//0和-1代表查询该键的所有值默认是按升序排序
Set tv = redisTemplate.opsForZSet().rangeWithScores("TV", 0, -1)
2.根据排序值(score)降序序排序
//reverseRangeWithScores是根据score降序排序
Set tv = redisTemplate.opsForZSet().reverseRangeWithScores("TV", 0, -1);
其中第一个参数是Key值
第二个表示起始索引(包含)从0开始
第三个表示结束索引(包含)
第三个参数为-1时表示查询之后所有的数据。
Zset返回的类型为:
Set<TypedTuple<PersonalRecord>>
我们可以将对象先从Set中取出,然后使用getValue()方法来获取对象,使用getScore()方法获取分数:
Set<TypedTuple<PersonalRecord>> datas = redisTemplate.opsForZSet().rangeWithScores("integralRank", 0, -1);
// 遍历
datas.forEach(data -> {
// 存入的对象
PersonalRecord pr = data.getValue();
// 对应的分数
Double score = data.getScore();
System.out.println(pr.getId() + " - " + score);
});