Sort Set类型的命令

引言

sort set是元素带有score,并且按score排序的有序集合
zset的命令中往往是对于三个维度去操作:score,按score排序后的下标,score相同情况下的元素字典排序后的值
这三个维度的命令的格式往往分别是:byscore、byrank、bylex
一共有以下命令需要熟悉,任务有点艰巨哦

BZPOPMAX
BZPOPMIN
ZADD
ZCARD
ZCOUNT
ZINCRBY
ZINTERSTORE
ZLEXCOUNT
ZPOPMAX
ZPOPMIN
ZRANGE
ZRANGEBYLEX
ZRANGEBYSCORE
ZRANK
ZREM
ZREMRANGEBYLEX
ZREMRANGEBYRANK
ZREMRANGEBYSCORE
ZREVRANGE
ZREVRANGEBYLEX
ZREVRANGEBYSCORE
ZREVRANK
ZSCAN
ZSCORE
ZUNIONSTORE

挨个介绍

向zset添加元素

sadd key [nx | xx] [ch] [incre] score member [score member]

  • nx 只有元素不存在才会添加
  • xx 只有元素存在才会更新score
  • ch 看不懂
  • incr 有这个选项就表示要增加member的score

获取zset的元素总数

zcard key

求得分数在min和max之间的元素个数。 统计值包括等于min和max值score的元素

zcount key min max

对一个member值的score增加increment

zincrby key increment member

获取分数最大的元素

zpopmax key

获取分数最小的元素

zpopmin key

对多个zset集合求并集把结果存储到destination集合中。 numkeys是为了只要有几个key,与后面的weight参数作为区分。
weight参数可以给每个集合指定一个乘法因子,score值在传递给聚合函数之前都要先乘以该因子。
sum、min、max是聚合函数,相同元素之间的聚合方法。

zunionstore destination numkeys key[key ...] [weight weight] [sum|min|max]
演示

redis> ZADD zset1 1 "one"
(integer) 1
redis> ZADD zset1 2 "two"
(integer) 1
redis> ZADD zset2 1 "one"
(integer) 1
redis> ZADD zset2 2 "two"
(integer) 1
redis> ZADD zset2 3 "three"
(integer) 1
redis> ZUNIONSTORE out 2 zset1 zset2 WEIGHTS 2 3
(integer) 3
redis> ZRANGE out 0 -1 WITHSCORES
1) "one"
2) "5"
3) "three"
4) "9"
5) "two"
6) "10"
redis> 

对多个zset集合求交集把结果存储到destination集合中。其他参数与zunionstore命令的一样

zinterstore destination numkeys key[key …] [weight weight] [sum|min|max]

用来计算zset集合中指定成员之间的成员数量

zlenxcount key min max

计算成员之间成员数量

redis> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis> ZADD myzset 0 f 0 g
(integer) 2
redis> ZLEXCOUNT myzset - +
(integer) 7
redis> ZLEXCOUNT myzset [b [f
(integer) 5
redis> 

计算某个成员之前或者之后的成员数量

redis> ZADD myzset 1 a 2 b 3 c 4 d 5 e 6 f 7 g
(integer) 7
redis> zrange myzset 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
redis> ZLEXCOUNT myzset - +
(integer) 7
redis> ZLEXCOUNT myzset [c +
(integer) 5
redis> ZLEXCOUNT myzset - [c
(integer) 3
redis> 

获取元素的score值

zscore key member

移除多个元素

zrem key member [member]

获取member元素的排名,从小到大,第一名是0

zrank key member

与zrank的排序方式相反,从大到小

zrevrank key member

复合命令

zrange

与其他命令类似,获取[start stop]范围内的元素
withscores会返回元素和元素的分数

zrange key start stop [withscores]

zrangebylex

获取成员之间的成员,按成员字典正序排序,分数必须相同。
limit offset count是用来分页查询的
[表示闭区间
(表示开区间
-表示最小
+表示最大

zrangebylex key min max [limit offset count]

redis> zadd zset 0 a 0 aa 0 abc 0 apple 0 b 0 c 0 d 0 d1 0 dd 0 dobble 0 z 0 z1
(integer) 12
redis> ZRANGEBYLEX zset [aa [c
1) "aa"
2) "abc"
3) "apple"
4) "b"
5) "c"

zrangebyscore

获取指定分数之间的成功,闭区间。

zrangebyscore key start stop [withscores] [limit offset count]

默认分数都是闭区间 可以在分数前加(表示开区间
+inf 和-inf表示返回所有
WITHSCORES和分页参数与之前类似

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANGEBYSCORE myzset -inf +inf
1) "one"
2) "two"
3) "three"
redis> ZRANGEBYSCORE myzset 1 2
1) "one"
2) "two"
redis> ZRANGEBYSCORE myzset (1 2
1) "two"
redis> ZRANGEBYSCORE myzset (1 (2
(empty list or set)
redis> 

zremrangebylex

删除指定成员之间的成员
[表示闭区间
(表示开区间
-表示最小
+表示最大

zremrangebylex key min max

zremrangebyrank

删除指定排名区间的元素

zremrangebyrank key start stop

zremangebyscore

删除指定分数之间的元素

zrevrange

按score值递减排序,获取指定排序范围内的元素

zrevrange key start stop [withscores]

zrevrangebylex

score相同情况下的元素字典逆序排序后的值范围
返回范围内的元素

zrevrangebylex key max min [LIMIT offset count]

zrevrangebyscore

sscore逆序排序后的范围
返回范围内的元素

zrevrangebyscore key max min [LIMIT offset count]

zscan

与scan类似
增量式的遍历zset内的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值