Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis SortedSet数据类型

Redis SortedSet数据类型及其常用命令总结

作者:喻师傅

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大,这篇文章主要介绍了Redis SortedSet数据类型及其常用命令详解,需要的朋友可以参考下

一、Redis概述

Redis概述

在这里插入图片描述

SortedSet类型

SortedSet具备下列特性:

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

1 ZADD:向有序集合添加成员

添加一个或多个元素到sorted set ,如果已经存在则更新其score值

在这里插入图片描述

ZADD 是 Redis 中用于向有序集合添加成员的命令。

ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

返回值

行为说明

示例

ZADD zset1 10 member1 20 member2

执行后:

使用场景

2 ZREM:从有序集合中移除一个或多个成员

在这里插入图片描述

ZREM 是 Redis 中用于从有序集合中移除一个或多个成员的命令。

ZREM key member [member ...]

返回值

行为说明

示例

有序集合 zset1,其中包含成员 member1member2member3

ZADD zset1 10 member1 20 member2 30 member3

从有序集合 zset1 中移除成员 member2

ZREM zset1 member2

执行后:

尝试移除不存在的成员 member4

ZREM zset1 member4

执行后:

注意事项

3 ZSCORE : 获取sorted set中的指定元素的score值

在这里插入图片描述

ZSCORE 是 Redis 中用于获取有序集合中指定成员的分数的命令。

ZSCORE key member

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZSCORE myzset "one"
"1"

返回字符串形式的成员分数。如果成员不存在于有序集合中,则返回 nil

行为说明

示例

有序集合 zset1,其中包含成员 member1member2member3,其分数分别为 102030

ZADD zset1 10 member1 20 member2 30 member3

查询 member2 的分数:

ZSCORE zset1 member2

执行后:

查询不存在的成员 member4 的分数:

ZSCORE zset1 member4

执行后:

返回值为 nil,因为 member4 不存在于 zset1 中。

注意事项

ZSCORE 命令是只读的,不会修改有序集合的内容。返回值是字符串形式的分数,即使实际分数是一个整数。

4 ZRANK:获取sorted set 中的指定元素的排名

在这里插入图片描述

ZRANK 是 Redis 中用于获取有序集合中指定成员的排名(索引)的命令。

ZRANK key member [WITHSCORE]

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANK myzset "three"
(integer) 2
redis> ZRANK myzset "four"
(nil)
redis> ZRANK myzset "three" WITHSCORE
1) (integer) 2
2) "3"
redis> ZRANK myzset "four" WITHSCORE
(nil)

如果成员存在于有序集合中,返回成员的排名(从 0 开始)。如果成员不存在于有序集合中,返回 nil

如果指定了 WITHSCORE 参数,返回值将是一个包含排名和分数的数组:[排名, 分数]。

行为说明

示例

有序集合 zset1,其中包含成员 member1member2member3,其分数分别为 102030

ZADD zset1 10 member1 20 member2 30 member3

查询 member2 的排名:

ZRANK zset1 member2

执行后:

返回值为 1,表示 member2 在有序集合中的排名是第二位(索引从 0 开始)。

查询 member4 的排名:

ZRANK zset1 member4

执行后:

使用 WITHSCORE 参数查询 member2 的排名和分数:

ZRANK zset1 member2 WITHSCORE

执行后:

注意事项

5 ZCARD:获取sorted set中的元素个数

在这里插入图片描述

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZCARD myzset
(integer) 2

6 ZCOUNT:统计score值在给定范围内的所有元素的个数

在这里插入图片描述

ZCOUNT 是 Redis 中用于获取有序集合中指定分数范围内的成员数量的命令。

ZCOUNT key min max

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZCOUNT myzset -inf +inf
(integer) 3
redis> ZCOUNT myzset (1 3
(integer) 2

返回指定分数范围内的成员数量。

行为说明

示例

有序集合 zset1,其中包含成员 member1member2member3,其分数分别为 102030

ZADD zset1 10 member1 20 member2 30 member3

查询分数在 [15, 25] 范围内的成员数量:

ZCOUNT zset1 15 25

执行后:

假设有序集合中没有相同分数的成员,返回值将是 1,因为只有 member2 的分数在 1525 之间。

7 ZINCRBY:让sorted set中的指定元素自增,步长为指定的increment值

在这里插入图片描述

ZINCRBY 是 Redis 中用于对有序集合中指定成员的分数进行增加或减少的命令。

ZINCRBY key increment member

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"

返回成员的新分数。

行为说明

示例

有序集合 zset1,其中包含成员 member1member2,它们的分数分别是 1020

ZADD zset1 10 member1 20 member2

member1 的分数增加 5

ZINCRBY zset1 5 member1

执行后:

返回值为 15,表示 member1 的新分数是 15

再将 member2 的分数减少 3.5

ZINCRBY zset1 -3.5 member2

执行后:

注意事项

8 ZRANGE:按照score排序后,获取指定排名范围内的元素

在这里插入图片描述

ZRANGE 是 Redis 中用于获取有序集合中指定范围内成员的命令。

支持多种选项来定制输出结果,包括按分数、字典顺序排序,反向排序,以及包含成员分数等。

ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

参数说明

示例

有序集合 zset1,其中包含以下成员和分数:

ZADD zset1 1 "one" 2 "two" 3 "three" 4 "four"

获取索引从 0 到 2 的成员:

ZRANGE zset1 0 2

返回:

1) "one"
2) "two"
3) "three"

获取索引从 0 到 2 的成员,并包含分数:

ZRANGE zset1 0 2 WITHSCORES

返回:

1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"

按分数范围获取成员,从分数 1 到 3:

ZRANGE zset1 1 3 BYSCORE

返回:

1) "one"
2) "two"
3) "three"

按字典顺序获取成员,并反向排列:

ZRANGE zset1 - + BYLEX REV

返回:

1) "two"
2) "three"
3) "one"
4) "four"

使用 LIMIT 选项来进行分页,获取按分数排序后的前两个成员:

ZRANGE zset1 -inf +inf BYSCORE LIMIT 0 2

返回:

1) "one"
2) "two"

9 ZDIFF、ZINTER、ZUNION:求差集、交集、并集 ZDIFF

在这里插入图片描述

ZDIFF 用于计算多个有序集合之间的差集,并将结果存储在新的有序集合中。

ZDIFF numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

示例:

ZDIFF 3 zset1 zset2 zset3 WEIGHTS 2 3 1 AGGREGATE MAX

ZINTER

ZINTER 用于计算多个有序集合的交集,并将结果存储在新的有序集合中。

ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

参数说明与 ZDIFF 类似,不同之处在于计算的是交集。

示例:

ZINTER 3 zset1 zset2 zset3 WEIGHTS 2 3 1 AGGREGATE MAX

ZUNION

在这里插入图片描述

ZUNION 用于计算多个有序集合的并集,并将结果存储在新的有序集合中。

ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

参数说明与 ZDIFFZINTER 类似,不同之处在于计算的是并集。

示例:

ZUNION 3 zset1 zset2 zset3 WEIGHTS 2 3 1 AGGREGATE MAX

更多的SortedSet命令可以去官网https://redis.io/docs/latest/commands/?group=sorted-set查看哦~

在这里插入图片描述

到此这篇关于Redis SortedSet数据类型及其常用命令详解的文章就介绍到这了,更多相关Redis SortedSet数据类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文