07-Redis的Sorted Set类型

注意:

  • Sorted Set这种类型是做了排序的,那么就会涉及到一个问题,首先我们要知道集合的元素不一定都是数字,所以排序的标准是什么呢?比如有苹果、橙子、香蕉组成了这个有序集合,那怎么排的序呢?我们可以根据他们的大小或者甘甜的程度来排序,当然也有其他的标准,我们把苹果的甜度设为100,香蕉的甜度设为90,橙子的甜度设为80,然后根据甜度大小排序,这就完成了该集合的排序。

  • 关于这个数据类型,我们得知道这种类型要把握好3个基本点,集合的元素、元素的分值、索引

常见命令

在这里插入图片描述

Sorted Set和List、Set的区别

  • List
    • 可以重复:list元素是可以重复的
    • 无序:集合里面的元素是无序的
    • 有序:是元素的插入和弹出有序
  • Set
    • 去重:set集合去重了的,元素不会有重复的
    • 无序:集合里面的元素是无序的
    • 无序:元素插入和弹出是无序的
  • Sorted Set:在Set的基础上,多了对成员排序的功能
    • 去重:Sorted Set集合去重了的,元素不会有重复的
    • 有序:集合里面的元素是有序的
    • 无序:元素插入和弹出是无序的

命令演示

127.0.0.1:7000> zadd k1 90 banana 100 apple 80 orange	#新增成员
(integer) 3
127.0.0.1:7000> zrange k1 0 -1	#显示全部成员
1) "orange"
2) "banana"
3) "apple"
127.0.0.1:7000> zrange k1 0 -1 withscores	#显示全部成员及分数
1) "orange"
2) "80"
3) "banana"
4) "90"
5) "apple"
6) "100"
127.0.0.1:7000> zadd k1 60 banana	#对已有的成员更改分数
(integer) 0
127.0.0.1:7000> zrange k1 0 -1 withscores	#banana成员分数更新,排序也更新了
1) "banana"
2) "60"
3) "orange"
4) "80"
5) "apple"
6) "100"
127.0.0.1:7000> ZCARD k1	#显示K1集合成员的个数
(integer) 3
127.0.0.1:7000> ZCOUNT k1 80 95		# 显示分数在80到95之间的成员个数
(integer) 1
127.0.0.1:7000> ZSCORE k1 banana	#显示banana成员的分数
"60"
127.0.0.1:7000> ZSCORE k1 apple
"100"
127.0.0.1:7000> ZSCORE k1 tomatoes	#显示tomatoes的分数,但是集合没有这个成员,所以返回为空
(nil)
127.0.0.1:7000> ZSCORE k2 apple		#显示apple的分数,但是没有k2这个集合,所以返回也为空
(nil)
127.0.0.1:7000> ZINCRBY k1 10 banana	#给banana的分数加10,原来它为60,返回更新后的分数值
"70"
127.0.0.1:7000> ZSCORE k1 banana
"70"
127.0.0.1:7000> ZINCRBY k1 -20 apple	#给apple的分数减去20,原来它为100,返回更新后的分数值
"80"
127.0.0.1:7000> ZSCORE k1 apple
"80"
127.0.0.1:7000> ZRANGE k1 0 -1 withscores	#正序显示成员及分数
1) "banana"
2) "70"
3) "apple"
4) "80"
5) "orange"
6) "80"
127.0.0.1:7000> ZREVRANGE k1 0 -1	#逆序显示成员
1) "orange"
2) "apple"
3) "banana"
127.0.0.1:7000> ZREVRANGE k1 0 -1 withscores 	#逆序显示成员及分数
1) "orange"
2) "80"
3) "apple"
4) "80"
5) "banana"
6) "70"
127.0.0.1:7000> 
------------------------------------------------------------------------------------------------------------
127.0.0.1:7000> ZADD k2 10 html 20 css 50 js 60 python 70 groovy 80 java 90 C++ 100 C
127.0.0.1:7000> ZRANGE k2 0 -1 withscores
 1) "html"
 2) "10"
 3) "css"
 4) "20"
 5) "js"
 6) "50"
 7) "python"
 8) "60"
 9) "groovy"
10) "70"
11) "java"
12) "80"
13) "C++"
14) "90"
15) "C"
16) "100"
127.0.0.1:7000> ZRANGEBYSCORE k2 60 100 withscores	#以分数来显示成员排序且带分数
 1) "python"
 2) "60"
 3) "groovy"
 4) "70"
 5) "java"
 6) "80"
 7) "C++"
 8) "90"
 9) "C"
10) "100"
127.0.0.1:7000> ZRANGEBYSCORE k2 -inf +inf withscores 	#显示最小值到最大值之间的成员及分数
 1) "html"
 2) "10"
 3) "css"
 4) "20"
 5) "js"
 6) "50"
 7) "python"
 8) "60"
 9) "groovy"
10) "70"
11) "java"
12) "80"
13) "C++"
14) "90"
15) "C"
16) "100"
127.0.0.1:7000> ZREVRANGEBYSCORE k2 -inf +inf withscores	#逆序显示,最小值在尾部,所以返回为空
(empty array)
127.0.0.1:7000> ZREVRANGEBYSCORE k2 +inf -inf withscores	#逆序显示,最大值在头部,最小值在尾部,由大到小排序
 1) "C"
 2) "100"
 3) "C++"
 4) "90"
 5) "java"
 6) "80"
 7) "groovy"
 8) "70"
 9) "python"
10) "60"
11) "js"
12) "50"
13) "css"
14) "20"
15) "html"
16) "10"
127.0.0.1:7000> ZREVRANGEBYSCORE k2 90 45 withscores	#逆序显示,90到45之间的成员及其分数
 1) "C++"
 2) "90"
 3) "java"
 4) "80"
 5) "groovy"
 6) "70"
 7) "python"
 8) "60"
 9) "js"
10) "50"
127.0.0.1:7000> ZREVRANGEBYSCORE k2 90.6 45.9 withscores	#分数是float类型
 1) "C++"
 2) "90"
 3) "java"
 4) "80"
 5) "groovy"
 6) "70"
 7) "python"
 8) "60"
 9) "js"
10) "50"
127.0.0.1:7000> ZRANGEBYSCORE k2 30 90 withscores limit 0 2		#正序返回分数值从30开始计数到90之间的2个成员
1) "js"
2) "50"
3) "python"
4) "60"
127.0.0.1:7000> ZREVRANGEBYSCORE k2 100 50 withscores limit 0 2		#逆序返回分数值从100开始计数到50之间的2个成员
1) "C"
2) "100"
3) "C++"
4) "90"
127.0.0.1:7000> 
127.0.0.1:7000> ZRANK k2 java	#返回java成员的正序号
(integer) 5
127.0.0.1:7000> ZREVRANK k2 java	#返回java成员的逆序号
(integer) 2
127.0.0.1:7000> 

集合:

k2: 10 html 20 css 50 js 60 python 70 groovy 80 java 90 C++ 100 C

k3: 80 python 75 java 90 C++ 90 C# 100 C

交集

127.0.0.1:7000> ZADD k3 75 java 80 python 100 C 90 C++ 90 C#
(integer) 5
127.0.0.1:7000> ZRANGE k3 0 -1 withscores
 1) "java"
 2) "75"
 3) "python"
 4) "80"
 5) "C#"
 6) "90"
 7) "C++"
 8) "90"
 9) "C"
10) "100"
127.0.0.1:7000> ZRANGE k2 0 -1 withscores
 1) "html"
 2) "10"
 3) "css"
 4) "20"
 5) "js"
 6) "50"
 7) "python"
 8) "60"
 9) "groovy"
10) "70"
11) "java"
12) "80"
13) "C++"
14) "90"
15) "C"
16) "100"
127.0.0.1:7000> ZINTERSTORE destk1 2 k2 k3	#默认求和,并存储在destk1集合中
(integer) 4
127.0.0.1:7000> ZRANGE destk1 0 -1 withscores
1) "python"
2) "140"
3) "java"
4) "155"
5) "C++"
6) "180"
7) "C"
8) "200"
127.0.0.1:7000> ZINTERSTORE destk1 2 k2 k3 weights 0.5 0.5	#带权重求和,就是说每个集合都乘以权重因子再相加
(integer) 4
127.0.0.1:7000> ZRANGE destk1 0 -1 withscores 
1) "python"
2) "70"
3) "java"
4) "77.5"
5) "C++"
6) "90"
7) "C"
8) "100"
127.0.0.1:7000> ZINTERSTORE destk1 2 k2 k3 weights 0.5 0.5 AGGREGATE min	#权重再求最小,就是说每个集合都乘以权重因子再求出交集中的最小值
(integer) 4
127.0.0.1:7000> ZRANGE destk1 0 -1 withscores
1) "python"
2) "30"
3) "java"
4) "37.5"
5) "C++"
6) "45"
7) "C"
8) "50"

并集

127.0.0.1:7000> ZUNIONSTORE destk2 2 k2 k3 	#求并集
(integer) 9
127.0.0.1:7000> ZRANGE destk2 0 -1 withscores
 1) "html"
 2) "10"
 3) "css"
 4) "20"
 5) "js"
 6) "50"
 7) "groovy"
 8) "70"
 9) "C#"
10) "90"
11) "python"
12) "140"
13) "java"
14) "155"
15) "C++"
16) "180"
17) "C"
18) "200"
127.0.0.1:7000> ZUNIONSTORE destk2 2 k2 k3 weights 0.5 0.5 aggregate max	#求带权重的并集,并取出并集中的较大者
(integer) 9
127.0.0.1:7000> ZRANGE destk2 0 -1 withscores	#查看结果
 1) "html"
 2) "5"
 3) "css"
 4) "10"
 5) "js"
 6) "25"
 7) "groovy"
 8) "35"
 9) "java"
10) "40"
11) "python"
12) "40"
13) "C#"
14) "45"
15) "C++"
16) "45"
17) "C"
18) "50"
127.0.0.1:7000> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值