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);
});