五Redis 有序集合

有序集合
按照元素的分 值来有序地 储存各不相同的元素。
有序集合(soted set / zset)
有序集合和集合一样,都可以包含任意数量的、各不相同的元素( element),不同于集合的是,有序集 合的每个元素都关 联着一个浮点数格式的分 值(score),并且有序集合会按照分 值,以从小到大的 顺序 来排列有序集合中的各个元素。
虽然有序集合中的每个元素都必 须是各不相同的,但元素的分 值并没有这一限制,换句话来说,两个不 同元素的分值可以是相同的

有序集合示例

 

基本操作
添加元素、删除元素、返回指定元素的分 值、返回集合包含的元素数量,等等。

添加元素
ZADD key score element [[score element] [score element] ...]
按照给定的分值和元素,将任意数量的元素添加到有序集合里面,命令的返回 值为成功添加的元素数量
192.168.229.131:7006> ZADD fruits-price 3.2 香蕉
(integer) 1
192.168.229.130:7003> ZADD fruits-price 2.0 西瓜
(integer) 1
192.168.229.130:7003>  ZADD fruits-price 4.0 番石榴 7.0 梨 6.8 芒果
(integer) 3
复杂度 O(M*log(N)),其中 N 为有序集合已有的元素数量, M 为成功添加的新元素数量。
删除元素
ZREM key element [element ...]
从有序集合中删除指定的元素,以及这些元素关联的分值,命令返回被成功删除的元素数量
192.168.229.131:7008> ZREM fruits-price 番石榴 梨 芒果
-> Redirected to slot [2341] located at 192.168.229.130:7003
(integer) 3
192.168.229.130:7003> ZREM fruits-price 西瓜
(integer) 1
192.168.229.130:7003>
复杂度 O(M*log(N)),其中 N 为有序集合已有的元素数量, M 为成功删除的元素数量
返回元素的分值
SCORE key element
返回有序集合中,指定元素的分值。
192.168.229.130:7003> ZSCORE fruits-price 西瓜
"2"
192.168.229.130:7003> ZSCORE fruits-price 香蕉
"3.2000000000000002"
192.168.229.130:7003>  ZSCORE fruits-price 芒果
"6.7999999999999998"
注意 因为分值储存的是浮点数,所以它们是不精确的,这看上去有 点奇怪,但并不影响使用。 比如说,大多数编程语言都会将香蕉和芒果的价格看作是 3.2 和 6.8
复杂度为 O(1)
增加或减少元素的分值
ZINCRBY key increment element
为有序集合指定元素的分 值加上增量 increment ,命令返回 执行操作之后,元素的分值
没有相应的 ZDECRBY 命令,但可以通过将 increment 设置为负数来减少分值。
复杂度为 O(log(N)) 
192.168.229.130:7003> ZINCRBY fruits-price 1.5 西瓜
"3.5"
192.168.229.130:7003> ZINCRBY fruits-price -0.8 香蕉
"2.4000000000000004"
192.168.229.130:7003> 
返回有序集合的基数
ZCARD key
返回有序集合包含的元素数量(基数)。复杂度为 O(1)
192.168.229.130:7003> ZADD fruits-price 3.2 香蕉
(integer) 0
192.168.229.130:7003> ZCARD fruits-price
(integer) 5
192.168.229.130:7003> ZADD fruits-price 2.0 西瓜
(integer) 0
192.168.229.130:7003> ZCARD fruits-price
(integer) 5
192.168.229.130:7003> ZADD fruits-price 4.0 番石榴 7.0 梨 6.8 芒果
(integer) 0
192.168.229.130:7003> ZCARD fruits-price
(integer) 5
192.168.229.130:7003>
返回元素的排名(rank)
ZRANK key element
返回指定元素在有序集合中的排名,其中 排名按照元素的分 值从小到大计算
排名以 0 开始
192.168.229.130:7003> zscore fruits-price 西瓜
"2"
192.168.229.130:7003> ZRANK fruits-price 番石榴
(integer) 2
192.168.229.130:7003> ZRANK fruits-price 芒果
(integer) 3
192.168.229.130:7003> 
返回元素的逆序排名(reverse rank)
ZREVRANK key member
返回成员在有序集合中的逆序排名,其中 排名按照元素的分 值从大到小计算。 排名以 0 开始。
192.168.229.130:7003> ZREVRANK fruits-price 西瓜
(integer) 4
192.168.229.130:7003> ZREVRANK fruits-price 番石榴
(integer) 2
192.168.229.130:7003> ZREVRANK fruits-price 芒果
(integer) 1
192.168.229.130:7003>
复杂度为 O(log(N)) 
分值范围操作
基于有序集合的排序性质,对处于某种分值范围之内的多个元素进行操作

获取指定索引范围内的升序元素
ZRANGE key start stop [WITHSCORES]
返回有序集合在按照分值从小到大排列元素(升序排列) 的情况下,索引 start 至索引 stop 范围之内的所 有元素。
两个索引都可以是正数或者 负数。当给定 WITHSCORES 选项时,命令会将元素和分值一并返回

命令的复杂度为 O(log(N)+M) ,N 为有序集合的基数,而 M 则为被返回元素的数量

 

获取指定索引范围内的降序元素 ZREVRANGE key start stop [WITHSCORES]
返回有序集合在按照分值从大到小排列元素(降序排列) 的情况下,索引 start 至索引 stop 范围之内的所 有元素。
两个索引都可以是正数或者 负数。当给定 WITHSCORES 选项时,命令会把元素和分 值一并返回
命令的复杂度为 O(log(N)+M) ,N 为有序集合的基数,而 M 则为被返回元素的数量

获取指定分值范围内的升序元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回有序集合在按照分值升序排列元素的情况下,分值在 min 和 max 范围之内的所有元素。
给定 WITHSCORES 选项时,元素和分值会一并返回。给定 LIMIT 选项时,可以通过 offset 参数指定返 回的结果集要跳过多少个元素,而 count 参数则用于指定返回的元素数量。
命令的复杂度为 O(log(N)+M), N 为有序集合的基数,而 M 则为被返回元素的数量
192.168.229.131:7008> ZRANGEBYSCORE fruits-price 3.0 7.0


获取指定分值范围内的降序元素
ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 返回有序集合在按照分值降序排列元素的情况下,分值在 min 和 max 范围之内的所有元素。
给定 WITHSCORES 选项时,元素和分值会一并返回。给定 LIMIT 选项,可以通过 offset 参数指定返回 的结果集要跳过多少个元素,而 count 参数则用于指定返回的元素数量
命令的复杂度为 O(log(N)+M), N 为有序集合的基数,而 M 则为被返回元素的数量
192.168.229.130:7003> ZREVRANGEBYSCORE fruits-price 7.0 3.0


计算给定分值范围内的元素数量
ZCOUNT key min max
返回有序集合在升序排列元素的情况下,分 值在 min 和 max 范围内的元素数量
192.168.229.130:7003> ZCOUNT fruits 3.0 7.0
192.168.229.130:7003> ZCOUNT fruits-price 5.0 10.0
命令的复杂度为 O(log(N)),N 为有序集合的函数

移除指定排名范围内的升序排列元素
ZREMRANGEBYRANK key start stop
移除有序集合中,元素按升序 进行排列的情况下,指定排名范 围内的所有元素。 排名范围可以使用正数和 负数
命令的复杂度为 O(log(N)+M), N 为有序集合的基数,而 M 则为被移除元素的数量

192.168.229.131:7008> ZREMRANGEBYRANK fruits-price 0 2
-> Redirected to slot [2341] located at 192.168.229.130:7003
(integer) 2
192.168.229.130:7003> ZRANGE fruits-price 0 -1

移除指定分值范围内的升序排列元素
ZREMRANGEBYSCORE key min max
移除有序集合中,分 值范围介于 min 和 max 之内的所有元素。 
redis> ZREMRANGEBYSCORE fruits 3.0 5.0
2
redis> ZRANGE fruits 0 -1
命令的复杂度为 O(log(N)+M), 其中 N 为有序集合的基数,
而 M 为被移除元素的数量。

集合运算操作
计算并储存多个有序集合的交集、并集运算 结果
计算并集和交集
计算结果会被储存到 destkey 里面, 命令返回结果集的基数。
numkeys 参数指定要进行计算的有序集合个数, key[key...] 指定进行计算的各个有序集合

ZUNIONSTORE 命令示例

命令示例
redis > ZADD fruits-8-13 300 "apple" 200 "banana" 150 "cherry" # 8 月 13 日水果销量
redis > ZADD fruits-8-14 250 "apple" 300 "banana" 100 "cherry" # 8 月 14 日水果销量
redis> ZUNIONSTORE fruits-8-13&14 2 fruits-8-13 fruits-8-14 # 计算 8 月 13 日和 14 日的总水果销量
redis> ZRANGE fruits-8-13&14 0 -1 WITHSCORES
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值