redis有序集合-sorted set

sorted set

Set是去重的集合,但是无序;sorted set即有序去重,按照一定规则对sorted set进行排序,list也有序,是插入的顺序;排序可以分为字典序和数值顺序;所以sorted set有元素、分值、索引构成,索引也分为正向索引和逆向索引,sorted set是按照物理内存左小右大(分值左小右大)的顺序排序;

127.0.0.1:6379> zadd k1 8 apple 2 banana 3 orange  向zset 的k 赋值和分数
(integer) 3
左小右大 根据分数排序
分    数:2       3       8
元    素:banana  orange Apple 
正向索引:0       1       2
反向索引:-3      -2      -1

根据下标取元素

127.0.0.1:6379> ZRANGE k1 0 3  取下标0-3的
1) "banana"
2) "orange"
3) "apple"
127.0.0.1:6379> ZRANGE k1 0 -1
1) "banana"
2) "orange"
3) "apple"

连分数一块取出

127.0.0.1:6379> ZRANGE k1 0 -1 WIthscores  连分数一块取出
1) "banana"
2) "2"
3) "orange"
4) "3"
5) "apple"
6) "8"
127.0.0.1:6379> ZREVRANGE k1 0 -1   逆序取出
1) "apple"
2) "orange"
3) "banana"
127.0.0.1:6379> ZREVRANGE k1 0 -1 withscores  连分数一块逆序取出
1) "apple"
2) "8"
3) "orange"
4) "3"
5) "banana"
6) "2"
127.0.0.1:6379> ZRANGEBYSCORE k1 3 8   按分数返回排序集中的一系列成员
1) "orange"
2) "apple"
127.0.0.1:6379> ZRANGEBYSCORE k1 3 8 withscores 按分数返回排序集中的一系列成员连分数一起取
1) "orange"
2) "3"
3) "apple"
4) "8"
127.0.0.1:6379> ZRANGEBYSCORE k1 3 8 limit 0 1  分页取 0 1 代表下标
1) "orange"
127.0.0.1:6379> ZRANGEBYSCORE k1 3 8 limit 0 2
1) "orange"
2) "apple"
127.0.0.1:6379> ZRANGEBYSCORE k1 3 8 limit 0 3
1) "orange"
2) "apple"
127.0.0.1:6379> ZRANGEBYSCORE k1 2 8 limit 0 3
1) "banana"
2) "orange"
3) "apple"
127.0.0.1:6379> ZRANGE k1 -2 -1  
1) "orange"
2) "apple"
127.0.0.1:6379> ZSCORE k1 apple   根据元素取分值
"8"
127.0.0.1:6379> ZSCORE k1 banana
"2"
127.0.0.1:6379> ZSCORE k1 orange
"3"
127.0.0.1:6379> ZRANK k1 apple   取元素的排名
(integer) 2
127.0.0.1:6379> ZRANK k1 orange
(integer) 1
127.0.0.1:6379> ZRANK k1 banana
(integer) 0
元素还支持数值运算 对元素的分数加减


127.0.0.1:6379> ZSCORE k1 apple  取出元素的分数
"8"
127.0.0.1:6379> ZSCORE k1 banana
"2"
127.0.0.1:6379> ZSCORE k1 orange  
"3"
127.0.0.1:6379> ZRANK k1 apple   取出元素的排名就是下标 因为左小右大
(integer) 2
127.0.0.1:6379> ZRANK k1 orange
(integer) 1
127.0.0.1:6379> ZRANK k1 banana
(integer) 0

对元素的分值做数值运算

127.0.0.1:6379> ZINCRBY k1 3.2 apple  对元素的分值做数值运算
应用场景可以是音乐播放器的热度排名 下载量加一就对sorted加一 然后逆序用zrevrange取出
"11.199999999999999"
127.0.0.1:6379> ZINCRBY k1 10 apple
"21.199999999999999"
127.0.0.1:6379> ZINCRBY k1 10 banana
"12"
127.0.0.1:6379> ZSCORE k1 banana
"12"
127.0.0.1:6379> ZRANGEBYSCORE k1 0 30
1) "orange"
2) "banana"
3) "apple"
127.0.0.1:6379> ZRANGEBYSCORE k1 0 30 withscores
1) "orange"
2) "3"
3) "banana"
4) "12"
5) "apple"
6) "21.199999999999999"
127.0.0.1:6379> ZRANGEBYSCORE k1 0 100 withscores limit 0 2
1) "orange"
2) "3"
3) "banana"
4) "12"
127.0.0.1:6379> ZRANGEBYSCORE k1 0 100 withscores limit 0 3
1) "orange"
2) "3"
3) "banana"
4) "12"
5) "apple"
6) "21.199999999999999"

nx不存在就添加

127.0.0.1:6379> ZADD k1 nx 80 tom 100 jack   nx不存在就添加
(integer) 2
127.0.0.1:6379> ZRANGE k1 0 2
1) "tom"
2) "jack"
127.0.0.1:6379> ZRANGE k1 0 2 withscores
1) "tom"
2) "80"
3) "jack"
4) "100"
127.0.0.1:6379> ZADD k2 xx 20 mare  
(integer) 0
127.0.0.1:6379> ZRANGE k2 0 2
(empty list or set)
127.0.0.1:6379> 

127.0.0.1:6379> ZADD k1 xx 90 tom    xx存在就修改
(integer) 0
127.0.0.1:6379> ZRANGE k1 0 2 withscores
1) "tom"
2) "90"
3) "jack"
4) "100"
127.0.0.1:6379> ZRANGE k1 0 2 withscores
1) "tom"
2) "90"
3) "jack"
4) "100"
127.0.0.1:6379> ZADD k1 xx 90 tom 200 jack
(integer) 0
127.0.0.1:6379> ZRANGE k1 0 2 withscores
1) "tom"
2) "90"
3) "jack"
4) "200"
127.0.0.1:6379> ZADD k1 80 t 60 s 70 b
(integer) 3
127.0.0.1:6379> ZCARD k1  获取有序集合中的成员数
(integer) 3
127.0.0.1:6379> 
阻塞队列
127.0.0.1:6379> BZPOPMAX k1 0  从一个或多个排序集中删除并返回得分最高的成员,或阻塞直到有一个可用
1) "k1"
2) "b"
3) "90"
(96.12s)
127.0.0.1:6379> ZADD k1 10 a 90 b 30 c
(integer) 3
127.0.0.1:6379> BZPOPMIN k1 0  从一个或多个排序集中删除并返回得分最低的成员,或阻塞直到有一个可用
1) "k1"
2) "a"
3) "10"
(29.26s)


127.0.0.1:6379> ZADD k1 10 a 20 b 30 c
(integer) 3
127.0.0.1:6379> ZRANGE k1  0 3
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> ZCOUNT k1 10 30  计算排序集中的成员,分数在给定值内
(integer) 3
127.0.0.1:6379> ZCOUNT k1 10 20
(integer) 2
127.0.0.1:6379> ZCOUNT k1 10 10
(integer) 1
127.0.0.1:6379> 

还可以做集合操作

127.0.0.1:6379> ZADD k1 80 t 60 s 70 b
(integer) 3
127.0.0.1:6379> ZADD k2 60 t 100 s 40 yi
(integer) 3
`27.0.0.1:6379> ZUNIONSTORE unkey1 2 k1 k2 aggregate sum 取并集聚合求和
(integer) 4
127.0.0.1:6379> ZRANGE unkey1 0 -1 withscores
1) "yi"
2) "40"
3) "b"
4) "70"
5) "t"
6) "140"
7) "s"
8) "160"
127.0.0.1:6379> ZUNIONSTORE unkey1 2 k1 k2 aggregate min 取并集聚合求最小
(integer) 4
127.0.0.1:6379> ZRANGE unkey1 0 -1 withscores
1) "yi"
2) "40"
3) "s"
4) "60"
5) "t"
6) "60"
7) "b"
8) "70"
127.0.0.1:6379> ZUNIONSTORE unkey1 2 k1 k2 aggregate max 取并集聚合求最大
(integer) 4
127.0.0.1:6379> ZRANGE unkey1 0 -1 withscores
1) "yi"
2) "40"
3) "b"
4) "70"
5) "t"
6) "80"
7) "s"
8) "100"
127.0.0.1:6379> ZUNIONSTORE unkey11 2 k1 k2
(integer) 4
127.0.0.1:6379> ZRANGE unkey11 0 -1 withscores
1) "yi"
2) "40"
3) "b"
4) "70"
5) "t"
6) "140"
7) "s"
8) "160"

取交集

取交集
127.0.0.1:6379> ZINTERSTORE un2 2 k2 k1 weights 2 1 k2权重2倍 k1一倍计算
(integer) 2
127.0.0.1:6379> ZRANGE un2 0 -1 withscores
1) "t"
2) "200"
3) "s"
4) "260"
127.0.0.1:6379> ZINTERSTORE un2 2 k2 k1 weights 2 1 aggregate sum  k2权重2倍 k1一倍计算求和
(integer) 2
127.0.0.1:6379> ZRANGE un2 0 -1 withscores
1) "t"
2) "200"
3) "s"
4) "260"
127.0.0.1:6379> ZINTERSTORE un2 2 k2 k1 weights 2 1 aggregate max  k2权重2倍 k1一倍计算求最大
(integer) 2
127.0.0.1:6379> ZRANGE un2 0 -1 withscores
1) "t"
2) "120"
3) "s"
4) "200"
127.0.0.1:6379> ZINTERSTORE un2 2 k2 k1 weights 2 1 aggregate min 求最小
(integer) 2
127.0.0.1:6379> ZRANGE un2 0 -1 withscores
1) "s"
2) "60"
3) "t"
4) "80"
127.0.0.1:6379> 

按字典顺序返回排序集中的成员范围

按字典顺序返回排序集中的成员范围
127.0.0.1:6379> ZADD k1 0 "a" 0 "b" 0 "c"  
(integer) 3
127.0.0.1:6379> ZRANGEBYLEX k1 [a [b
1) "a"
2) "b"
127.0.0.1:6379> ZRANGEBYLEX k1 [c [d
1) "c"
127.0.0.1:6379> ZRANGEBYLEX k1 [g [h
(empty list or set)
127.0.0.1:6379> ZRANGEBYLEX k1 [a [b limit 0 1
1) "a"
127.0.0.1:6379> ZRANGEBYLEX k1 [a [b limit 0 2
1) "a"
2) "b"
127.0.0.1:6379> ZRANGEBYLEX k1 [a [c limit 0 3
1) "a"
2) "b"
3) "c"

计算给定字典范围之间排序集中的成员数

计算给定字典范围之间排序集中的成员数
127.0.0.1:6379> ZLEXCOUNT k1 [a [c
(integer) 3
127.0.0.1:6379> ZLEXCOUNT k1 [a [b
(integer) 2
127.0.0.1:6379> ZLEXCOUNT k1 [a [z
(integer) 3
127.0.0.1:6379> 

删除给定字典范围之间排序集中的所有成员

删除给定字典范围之间排序集中的所有成员
127.0.0.1:6379> ZADD k1 10 a 20 b 30 c
(integer) 3
127.0.0.1:6379> ZREM k1 a
(integer) 1
127.0.0.1:6379> ZRANGE k1 0 -1
1) "b"
2) "c"
127.0.0.1:6379> ZADD k2 0 "as" 0 "sd" 0 "er"
(integer) 3
127.0.0.1:6379> ZRANGE k2 0 -1
1) "as"
2) "er"
3) "sd"
127.0.0.1:6379> ZRANGEBYLEX k2 [a [z
1) "as"
2) "er"
3) "sd"
127.0.0.1:6379> ZRANGEBYLEX k2 [a [c
1) "as"
127.0.0.1:6379> ZREMRANGEBYLEX k2 [a [c
(integer) 1
127.0.0.1:6379> ZRANGE k2 0 -1
1) "er"
2) "sd"
127.0.0.1:6379> 

删除给定索引内排序集中的所有成员

删除给定索引内排序集中的所有成员
127.0.0.1:6379> ZADD k1 10 a 20 b 30 c 40 d 50 e 60 f
(integer) 6
127.0.0.1:6379> ZRANGE k1 0 -1 withscores
 1) "a"
 2) "10"
 3) "b"
 4) "20"
 5) "c"
 6) "30"
 7) "d"
 8) "40"
 9) "e"
10) "50"
11) "f"
12) "60"
127.0.0.1:6379> ZREMRANGEBYRANK k1 0 1
(integer) 2
127.0.0.1:6379> ZRANGE k1 0 -1 withscores
1) "c"
2) "30"
3) "d"
4) "40"
5) "e"
6) "50"
7) "f"
8) "60"
127.0.0.1:6379> 

删除给定分数内排序集中的所有成员

删除给定分数内排序集中的所有成员
127.0.0.1:6379> ZREMRANGEBYSCORE k1 30 40
(integer) 2
127.0.0.1:6379> ZRANGE k1 0 -1 withscores
1) "e"
2) "50"
3) "f"
4) "60"
127.0.0.1:6379> 

127.0.0.1:6379> ZADD k1 10 a 20 b 30 c 40 d 50 e 60 f 70 g
(integer) 7
127.0.0.1:6379> ZREVRANGE k1 0 -1
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "b"
7) "a"

按索引返回排序集中的成员范围,分数从高到低排序

127.0.0.1:6379> ZREVRANGE k1 0 -1 withscores
 1) "g"
 2) "70"
 3) "f"
 4) "60"
 5) "e"
 6) "50"
 7) "d"
 8) "40"
 9) "c"
10) "30"
11) "b"
12) "20"
13) "a"
14) "10"
127.0.0.1:6379> ZRANGE k1 0 -1 withscores
 1) "a"
 2) "10"
 3) "b"
 4) "20"
 5) "c"
 6) "30"
 7) "d"
 8) "40"
 9) "e"
10) "50"
11) "f"
12) "60"
13) "g"
14) "70"

按分数返回排序集中的一系列成员,分数从高到低排序

按分数返回排序集中的一系列成员,分数从高到低排序
127.0.0.1:6379> ZREVRANGEBYSCORE k1 20 50 withscores
(empty list or set)
127.0.0.1:6379> ZREVRANGEBYSCORE k1 50 20 withscores
             索引
1) "e"      0
2) "50"  1 
3) "d" 2
4) "40" 3 
5) "c" 4 
6) "30" 5 
7) "b" 6 
8) "20" 7
127.0.0.1:6379> ZREVRANGEBYSCORE k1 50 20 withscores limit 2 2
1) "c"
2) "30"
3) "b"
4) "20"
127.0.0.1:6379> ZREVRANGEBYSCORE k1 50 20 withscores limit 0 2
1) "e"
2) "50"
3) "d"
4) "40"
127.0.0.1:6379> ZREVRANGEBYSCORE k1 50 20 withscores limit 0 1
1) "e"
2) "50"
127.0.0.1:6379> 

确定某个成员在有序集合中的索引,分数从高到低排序

确定某个成员在有序集合中的索引,分数从高到低排序
127.0.0.1:6379> ZREVRANK k1 a
(integer) 6
127.0.0.1:6379


127.0.0.1:6379> ZADD k1 0 "a" 0 "b" 0 "c"
(integer) 3
127.0.0.1:6379> ZRANGE k1 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> ZRANGEBYLEX k1 [a [b
1) "a"
2) "b"

返回排序集中的成员范围,按字典序范围,从高到低的字符串

返回排序集中的成员范围,按字典序范围,从高到低的字符串
127.0.0.1:6379> ZREVRANGEBYLEX k1 [b [a
1) "b"
2) "a"
127.0.0.1:6379> 

增量迭代已排序的集合元素和相关分数

127.0.0.1:6379> ZADD site 1 "Google" 2 "Runoob" 3 "Taobao" 4 "Weibo"
(integer) 4
127.0.0.1:6379> ZSCAN site 0 match "R*"
1) "0"
2) 1) "Runoob"
   2) "2"
127.0.0.1:6379>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值