Redis 知识量:6 - 20 - 96
Redis的Sorted Set是一种有序集合,其元素都是唯一的,但分数(score)可以重复。每个元素都关联一个double类型的分数,通过分数对元素进行排序。Sorted Set中的每个元素都带有一个分数属性,这个分数属性可以用于对元素进行排序。底层的实现是一个跳表(SkipList)加 hash table。
Sorted Set具备下列特性:
可排序:由于每个元素都有一个与之关联的分数,因此可以通过这个分数对元素进行排序。
元素不重复:与Redis的Set类似,Sorted Set中的元素是唯一的,不会有重复的元素。
查询速度快:由于Sorted Set的实现是跳表和哈希表的混合体,因此查询速度非常快。
Sorted Set经常被用来实现排行榜这样的功能。例如,可以把要排序的字段作为分数存储,对象的ID当元素存储。这样,可以通过Sorted Set来快速地获取排名靠前的元素。
Sorted Set类型数据操作指令包括:zadd、zrem、zincrby、zrank、zrevrank、zrange、zrevrange、zrangebyscore、zcount、zcard、zscore等。这些指令允许添加元素到集合,删除指定元素,增加元素的分数并移动元素,获取指定元素的排名,获取指定区间的元素等。
ZADD是Redis中用于添加或更新一个或多个元素及其分数到有序集合的命令。
语法:
ZADD key score member [score member ...]
参数:
key:有序集合的键名。
score:要添加或更新的元素的分数。
member:要添加或更新的元素。
返回值:
如果元素已存在,则返回0,表示分数没有更新。
如果元素不存在,则返回1,表示元素被添加到集合中。
如果操作成功,返回操作影响的元素数量。
示例:
ZADD myzset 90 apple ZADD myzset 80 banana 70 cherry
上述命令将添加或更新三个元素:"apple"、"banana"和"cherry"到名为"myzset"的有序集合中,它们的分数分别为90、80和70。如果元素已经存在于集合中,则更新其分数。
ZREM是Redis中用于从有序集合中移除一个或多个元素的命令。
语法:
ZREM key member [member ...]
参数:
key:有序集合的键名。
member:要移除的元素。可以一次移除多个元素,用逗号分隔。
返回值:
返回被移除的元素数量。
如果集合不存在或元素不存在,则返回0。
示例:
ZREM myzset apple banana cherry
上述命令将尝试从名为"myzset"的有序集合中移除三个元素:"apple"、"banana"和"cherry"。如果集合中存在这些元素,它们将被成功移除;否则,没有进行任何操作。
ZCARD是Redis中用于获取有序集合的元素数量的命令。
语法:
ZCARD key
参数:
key:有序集合的键名。
返回值:
返回有序集合的元素数量。
如果键不存在,则返回0。
示例:
ZCARD myzset
上述命令将返回名为"myzset"的有序集合的元素数量。
ZCOUNT是Redis中用于计算有序集合中指定分数区间的成员数量的命令。
语法:
ZCOUNT key min max
参数:
key:有序集合的键名。
min和max:分数值在min和max之间的成员数量。
返回值:
分数值在min和max之间的成员的数量。
如果键不存在,则返回0。
示例:
ZCOUNT myzset 1 100
上述命令将返回在分数值介于1和100之间的成员数量,从名为"myzset"的有序集合中计算得出。
ZSCORE是Redis中用于获取有序集合中指定元素的分数的命令。
语法:
ZSCORE key member
参数:
key:有序集合的键名。
member:要获取分数的元素。
返回值:
返回指定元素的分数。
如果元素不存在于集合中,则返回nil。
示例:
ZSCORE myzset apple
上述命令将返回名为"myzset"的有序集合中元素"apple"的分数。如果元素不存在,则返回nil。
ZRANGE是Redis中用于获取有序集合中指定区间内的成员的命令。
语法:
ZRANGE key start stop [WITHSCORES]
参数:
key:有序集合的键名。
start和stop:区间的起始和结束位置。它们是相对于有序集合中的元素位置的索引,以0为基数的索引表示第一个元素,1表示第二个元素,以此类推。也可以使用负数索引表示从集合末尾开始的位置,-1表示最后一个元素,-2表示倒数第二个元素,以此类推。
WITHSCORES:可选参数,用于同时返回每个元素的分数。如果不使用WITHSCORES参数,则只返回元素本身。
返回值:
返回指定区间内的成员。如果使用了WITHSCORES参数,则同时返回每个元素的分数。
如果集合不存在或索引超出范围,则返回一个空列表。
示例:
ZRANGE myzset 0 1 WITHSCORES
上述命令将返回名为"myzset"的有序集合中位置在0和1之间的成员及其分数。这表示从集合的第一个元素到第二个元素之间的成员和它们的分数。如果集合不存在或索引超出范围,则返回一个空列表。
ZREVrange是Redis中用于获取有序集合中指定区间内的成员,按照分数从高到低排序的命令。
语法:
ZREVRANGE key start stop [WITHSCORES]
参数:
key:有序集合的键名。
start和stop:区间的起始和结束位置。它们是相对于有序集合中的元素位置的索引,以0为基数的索引表示第一个元素,1表示第二个元素,以此类推。也可以使用负数索引表示从集合末尾开始的位置,-1表示最后一个元素,-2表示倒数第二个元素,以此类推。
WITHSCORES:可选参数,用于同时返回每个元素的分数。如果不使用WITHSCORES参数,则只返回元素本身。
返回值:
返回指定区间内的成员。如果使用了WITHSCORES参数,则同时返回每个元素的分数。
如果集合不存在或索引超出范围,则返回一个空列表。
示例:
ZREVRANGE myzset 0 1 WITHSCORES
上述命令将返回名为"myzset"的有序集合中位置在0和1之间的成员及其分数,按照分数从高到低排序。如果集合不存在或索引超出范围,则返回一个空列表。
ZREVrangebyscore用于返回有序集中指定分数区间内的所有成员,并按照分数从高到低排序。
ZREVRANGEBYSCORE的语法如下:
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
其中,key是集合的键名,max和min是分数区间的上限和下限。返回的成员按照分数从高到低排序。
如果使用WITHSCORES选项,命令将同时返回每个元素的分数。LIMIT选项用于限制返回的成员数量,通过指定偏移量和数量来达到分页的效果。
例如,以下命令将返回键名为"myzset"的有序集合中分数在1和5之间的所有成员,按照分数从高到低排序,并返回包括分数的成员列表:
ZREVRANGEBYSCORE myzset 5 1 WITHSCORES
这个命令将返回一个有序的成员列表,其中每个成员都带有其对应的分数。如果没有指定WITHSCORES选项,则只返回成员本身。
ZREVRANGEBYSCORE命令具有以下特性:
它按照分数从高到低排序返回成员。这与ZRANGEBYSCORE命令相反,ZRANGEBYSCORE命令按照分数从低到高排序返回成员。
它支持使用WITHSCORES选项来获取包括分数的成员列表。这对于需要同时获取成员和其分数的场景非常有用。
它支持使用LIMIT选项来限制返回的成员数量,这在分页场景中非常有用。
它只返回分数在指定区间内的成员,可以用于过滤和筛选集合中的元素。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6