设为首页 收藏本站
查看: 669|回复: 0

[经验分享] redis命令(5)--有序集合类型(zset)

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-12-21 07:15:19 | 显示全部楼层 |阅读模式
有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度是O(log(N)))。
 
有序集合类型中元素唯一性,有序性。
有序是按照元素的分值排序,分值是添加元素时指定的,可以改变元素的分值从而改变元素的顺序。
 
以下命令中的key 为有序集合的key(键名)
 
 
1.添加元素
ZADD key score value[score value…]
向有序集合中添加一个或多个元素,元素值为value ,对应的分值为score ,如果集合中不存在value,则添加,否则更改该元素的分值==score
score 可以为整型或浮点型 ,特殊值:+inf 正无穷 -inf负元穷
 

localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zadd ranking 83 mi
(integer) 0

 2.获取元素的分值
zscore key value
 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zscore ranking iphone
"90"

 3.按排名范围查询元素,返回值按由小到大的顺序排列

ZRANGE key  startIndex , endIndex [[size=1em]WITHSCORES]
添加到有序集合中的元素会按分值由小到大排名。
排名写法:
1.分值最小的排名为0 ,分值最大的排名等于元素个数-1,
2.分值最大的排名为-1,分值最小的排名等于负的元素个数
如:有10个元素的有序集合:
1.元素值最小的排名为0 ,元素值最大的排名为9,
2 元素值最小的排名为-10 ,元素值最大的排名为-1,
 

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrange ranking 0 3
1) "mi"
2) "sony"
3) "huawei"
4) "iphone"
localhost:6379> zrange ranking 0 -1
1) "mi"
2) "sony"
3) "huawei"
4) "iphone"
localhost:6379> zrange ranking -2 -1
1) "huawei"
2) "iphone"
localhost:6379> zrange ranking -1 -2
(empty list or set)
 如果需要返回分值,则zrange 命令最后面增加:WITHSCORES
localhost:6379> zrange ranking 0 -1 withscores
1) "mi"
2) "78"
3) "sony"
4) "80"
5) "huawei"
6) "82"
7) "iphone"
8) "90"

 4.按排名范围查询元素,返回值按由大到小的顺序排列  ZREVRANGE key  startIndex , endIndex  [WITHSCORES]
   zrevrange 与zrange 命令相同,只是返回值按由大到小顺序排列

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrevrange ranking 0 -1
1) "iphone"
2) "huawei"
3) "sony"
4) "mi"
localhost:6379> zrevrange ranking 0 3
1) "iphone"
2) "huawei"
3) "sony"
4) "mi"
localhost:6379> zrevrange ranking -4 -1
1) "iphone"
2) "huawei"
3) "sony"
4) "mi"

 5.按分值范围查询元素,返回值按元素分值小到大排序  ZRANGEBYSCORE key minScore maxScore [WITHSCROES] [LIMIT  offset count]
  查询分值>=minScore  && 分值<=maxScore 的元素。
  (分值可以使用-inf负无穷大+inf正无穷大)
  ("("+分值 代表不包含该分值)
  WITHSCROES :返回值中带有元素的分值
  [LIMIT  offset count]:在查询结果的元素中,以排序在offset 位置开始取count个元素,offset由0开始
   

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrangebyscore ranking 80 90
1) "sony"
2) "huawei"
3) "iphone"
localhost:6379> zrangebyscore ranking 80 90  withscores
1) "sony"
2) "80"
3) "huawei"
4) "82"
5) "iphone"
6) "90"
localhost:6379> zrangebyscore ranking 80 90 withscores
1) "sony"
2) "80"
3) "huawei"
4) "82"
5) "iphone"
6) "90"
localhost:6379> zrangebyscore ranking 80 90 withscores limit 0 2
1) "sony"
2) "80"
3) "huawei"
4) "82"
   6.增加某个元素的分值
  Z INCRBY key increment value

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrange ranking 0 -1 withscores
1) "mi"
2) "78"
3) "sony"
4) "80"
5) "huawei"
6) "82"
7) "iphone"
8) "90"
localhost:6379> zincrby ranking 8 mi
"86"
localhost:6379> zrange ranking 0 -1 withscores
1) "sony"
2) "80"
3) "huawei"
4) "82"
5) "mi"
6) "86"
7) "iphone"
8) "90"
   7.获取有序集合中的元素个数
  ZCARD key

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zcard ranking
(integer) 4

 8.获取指定分值范围的元素的个数  ZCOUNT key minScore maxScore

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zcount ranking 80 90
(integer) 2
 9.删除一个或多个元素,返回删 除元素的个数  ZREM key value1 value2 value...
  

localhost:6379> del ranking
(integer) 1
localhost:6379> zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4

localhost:6379> zrem ranking sony mi
(integer) 2
localhost:6379> zrange ranking 0 -1
1) "huawei"
2) "iphone"

   10.按排名范围删除元素
  ZREMRANGEBYRANK key startIndex endIndex
  

localhost:6379> del ranking
(integer) 1
localhost:6379>  zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zremrangebyrank ranking 0 2
(integer) 3
localhost:6379> zrange ranking 0 -1
1) "iphone"

   11.按分值范围删除元素
  ZREMRANGEBYSCORE key minScore maxScore
  

localhost:6379>  del ranking
(integer) 1
localhost:6379>  zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zremrangebyscore ranking 70 80
(integer) 2
localhost:6379> zrange ranking 0 -1
1) "huawei"

   12.获取元素的排名
  ZRANK key value //返回元素值==value的元素的排名 (由小到到的排名顺序,最小值排名为0)
  ZREVRANK key value  //返回元素值==value的元素的排名 (由大到小的排名顺序,最大值排名为0)

localhost:6379> del ranking
(integer) 1
localhost:6379>  zadd ranking 90 iphone 80 sony 82 huawei 78 mi
(integer) 4
localhost:6379> zrank ranking sony
(integer) 1
localhost:6379> zrevrank ranking sony
(integer) 2
localhost:6379> zrank ranking iphone
(integer) 3
localhost:6379> zrevrank ranking iphone
(integer) 0

   13.有序集合的交运算
  ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]]
  [AGREGATE SUM|MIN|MAX]
  N个有序集合中相同元素分值计算,并将结果保存在目标有序集合中。
  destination :交运算的结果保存到有序集合destination 中
  numkeys :指定参与计算的有序集合的个数
  key [key …]:参与计算的有序集合
  [WEIGHTS weight [weight …]]:可选参数,指定参与计算的每一个集合的权重,计算时,集合中元素的分值乘以权重,再与其它集合计算
  [AGREGATE SUM|MIN|MAX]:可选参数,默认为 集合中相同元素进行sum计算,可以指定为min 取小值或max 取最大值计算

localhost:6379> del testOne
(integer) 1
localhost:6379> del testTwo
(integer) 1
localhost:6379> zadd testOne 90 tom 80 carry 70 lisa
(integer) 3
localhost:6379> zadd testTwo 85 tom 95 carry 83 lisa
(integer) 3
localhost:6379> zinterstore testSumResult 2 testOne testTwo
(integer) 3
localhost:6379> zrange testSumResult 0 -1 withscores
1) "lisa"
2) "153"
3) "carry"
4) "175"
5) "tom"
6) "175"
localhost:6379> zinterstore testMinResult 2 testOne testTwo aggregate min
(integer) 3
localhost:6379> zrange testMinResult 0 -1 withscores
1) "lisa"
2) "70"
3) "carry"
4) "80"
5) "tom"
6) "85"
localhost:6379> zinterstore testMaxResult 2 testOne testTwo aggregate max
(integer) 3
localhost:6379> zrange testMaxResult 0 -1 withscores
1) "lisa"
2) "83"
3) "tom"
4) "90"
5) "carry"
6) "95"

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-317043-1-1.html 上篇帖子: redis命令(2)--字符串类型 下篇帖子: Redis 集群解决方案 Coordis
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表