Redis 的 Sorted Set 类型
Redis 是一个高性能的开源 NoSQL 数据库,同时它也提供了多种数据类型来满足不同的需求,其中 Sorted Set 就是比较常用的一种。
Sorted Set 和 Set 类型类似,都是用来存储不重复的字符串类型数据,并且可以进行添加、删除、查找等操作。它们主要的区别在于 Sorted Set 中的每个元素都有一个与之关联的分值(score),并且 Sorted Set 中的元素是按照分值大小排序的。
Redis 的 Sorted Set 类型操作命令
下面我们对 Redis 的 Sorted Set 类型进行一些详细的操作命令介绍。
创建 Sorted Set
创建 Sorted Set 可以使用 ZADD 命令,它有两种形式:
- ZADD key score member [score member ...]:添加一个或多个元素到指定的 Sorted Set 中,如果已存在则更新分值。
- ZADD key NX score member [score member ...]:仅当指定的 member 不存在时才执行添加操作。
示例代码:
ZADD mySortedSet 1 "A" ZADD mySortedSet 2 "B" ZADD mySortedSet 3 "C"
删除元素
- ZREM key member [member ...]:从指定的 Sorted Set 中删除一个或多个元素。
示例代码:
ZREM mySortedSet "A"
获取元素分值
- ZSCORE key member:获取指定元素的分值。
示例代码:
ZSCORE mySortedSet "B"
获取排名
- ZRANK key member:获取指定元素在 Sorted Set 中的排名,排名从 0 开始,按分值从小到大排序。
- ZREVRANK key member:获取指定元素在 Sorted Set 中的排名,排名从 0 开始,按分值从大到小排序。
示例代码:
ZRANK mySortedSet "C" ZREVRANK mySortedSet "C"
获取排名区间内的元素
- ZRANGE key start stop [WITHSCORES]:获取排名区间内的元素列表,排名范围从 start 到 stop,包含 start 和 stop。如果指定了 WITHSCORES 参数,则同时返回元素和分值。无法使用负数索引。
- ZREVRANGE key start stop [WITHSCORES]:获取倒序排名区间内的元素列表,排名范围从 start 到 stop,包含 start 和 stop。如果指定了 WITHSCORES 参数,则同时返回元素和分值。无法使用负数索引。
示例代码:
ZRANGE mySortedSet 0 2 WITHSCORES ZREVRANGE mySortedSet 0 2 WITHSCORES
获取分值区间内的元素数量
- ZCOUNT key min max:获取分值区间内的元素数量,包括 min 和 max。
示例代码:
ZCOUNT mySortedSet 1 3
获取分值区间内的元素
- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]:获取分值区间内的元素列表,包括 min 和 max。如果指定了 WITHSCORES 参数,则同时返回元素和分值。如果指定了 LIMIT 参数,则限制返回结果的数量和偏移量。
示例代码:
ZRANGEBYSCORE mySortedSet 2 3 WITHSCORES ZRANGEBYSCORE mySortedSet 1 3 WITHSCORES LIMIT 0 2
Redis 的 Sorted Set 类型使用案例
按照成绩排名
在学校每个班级中都有成绩排名,可以使用 Sorted Set 来存储学生的成绩,并且按照成绩大小从小到大排序,排名从 1 开始。其中成绩作为分值,学生姓名作为元素。
以下是示例代码:
// 添加成绩 ZADD grade:school:class1 80 "Tom" ZADD grade:school:class1 90 "Jim" ZADD grade:school:class1 70 "Mary" // 查看成绩排名 ZRANK grade:school:class1 "Jim" ZRANGE grade:school:class1 0 -1 WITHSCORES
按照上线时间排序任务列表
在完成任务的场景中,需要将任务根据上线时间排序,来确定下一步要执行的任务。可以使用 Sorted Set 来存储任务的上线时间,并按照时间大小从小到大排序,任务唯一标识作为元素。
以下是示例代码:
// 添加任务上线时间 ZADD tasks 1615254000 "task001" ZADD tasks 1615254500 "task002" ZADD tasks 1615255000 "task003" // 获取即将要执行的任务 ZRANGEBYSCORE tasks 1615254600 +inf WITHSCORES
总结
Sorted Set 作为 Redis 的一种常用数据类型,可以方便快捷地进行排序,适用于多种场景。我们通过该篇文章的详细介绍,希望可以帮助读者更好地了解及使用 Redis 的 Sorted Set 类型。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65191f8395b1f8cacd158587