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

[经验分享] redis zset-IT小黑兵

[复制链接]

尚未签到

发表于 2018-11-6 12:36:44 | 显示全部楼层 |阅读模式
  redis支持有序集合,即sorted set。sorted set在set的基础上,增加了排序属性,是set的升级版。这里简要谈谈sorted set的常用函数:
  1)insert
  a)  zadd
  语法:zadd key score member [[score member] [score member] ...]
  解释:增加一个或多个member【根据score排序】到有序集key中,如果member已经存在,只更新score。返回增加member个数,不包含已经存在的member
[root@xsf001 ~]# redis-cli  
redis 127.0.0.1:6379> ZADD score 230 zhangsan
  
(integer) 1
  
redis 127.0.0.1:6379> zadd score 240 lisi 250 wangwu
  
(integer) 2
  
redis 127.0.0.1:6379> zadd score 100 liuli
  
redis 127.0.0.1:6379> zadd score 249 wangwu
  
(integer) 0
  注意:有些redis版本,只能一次添加一个member
  2)select
  a)zrange
  语法:zrange key start stop [withscores]
  解释:返回有续集key中指定范围【通过索引 start stop】的member[及其score];
redis 127.0.0.1:6379> zrange score 0 -1  #所有元素  
1) "liuli"
  
2) "zhangsan"
  
3) "lisi"
  
4) "wangwu"
  
redis 127.0.0.1:6379> zrange score 0 -1 withscores  #所有member及score
  
1) "liuli"
  
2) "100"
  
3) "zhangsan"
  
4) "230"
  
5) "lisi"
  
6) "240"
  
7) "wangwu"
  
8) "249"
  
redis 127.0.0.1:6379> zrange score 0 2 withscores  #前三个元素
  
1) "liuli"
  
2) "100"
  
3) "zhangsan"
  
4) "230"
  
5) "lisi"
  
6) "240"
  
redis 127.0.0.1:6379> zrange score 0 -2  #第一个元素到
  
1) "liuli"
  
2) "zhangsan"
  
3) "lisi"
  注意:0,表示第一个元素,-1 表示最后一个元素,-2 表示倒数第二个元素
  b)zcount
  语法:zcount key min max
  解释:统计key中score值介于min 和max之间的member个数
redis 127.0.0.1:6379> zrange key 0 -1 withscores  
1) "liuli"
  
2) "100"
  
3) "zhangsan"
  
4) "230"
  
5) "lisi"
  
6) "240"
  
7) "wangwu"
  
8) "249"
  
redis 127.0.0.1:6379> zcount key 230 240  # count(score >=230 && score  zscore key liuli  
"100"
  d)zrevrange
  语法:zrevrange key start stop [withscores]
  解释:返回有续集key中指定范围[通过索引start stop]的member[及score],返回member根据score按降序排列
  
redis 127.0.0.1:6379> zrevrange kye 0 -1 withscores
  
1) "wangwu"
  
2) "249"
  
3) "lisi"
  
4) "240"
  
5) "zhangsan"
  
6) "230"
  
7) "liuli"
  
8) "100"
  
redis 127.0.0.1:6379> zrevrange score 1 -2
  
1) "lisi"
  
2) "zhangsan"
  e)zrangebyscore
  语法:zrangebyscore key min max [withscores] [limit offset count]
  解释:返回有续集key中,score大于等于min并且小于等于max的member。返回结果按照score递增的次序排列。可选withscores决定返回结果集中仅仅返回member还是返回member和score;可选参数limit 指定返回结果的数量区间。
redis 127.0.0.1:6379> zrangebyscore score 100 10000 withscores  
1) "liuli"
  
2) "100"
  
3) "zhangsan"
  
4) "230"
  
5) "lisi"
  
6) "240"
  
7) "wangwu"
  
8) "249"
  
redis 127.0.0.1:6379> zrangebyscore score 100 10000  limit 1 3
  
1) "zhangsan"
  
2) "lisi"
  
3) "wangwu"
  f)zrevrangebyscore
  语法:zrevrangescore key max min [withscores] [limit offset count]
  解释:返回有续集key中score=min 的元素,返回结果根据score从大到小顺序排列。可选参数withscores决定结果集中是否包含score,可选参数limit 指定返回结果集范围。(倒叙)
redis 127.0.0.1:6379> zrevrangebyscore score 0 10000  
(empty list or set)
  
redis 127.0.0.1:6379> zrevrangebyscore score 10000 0
  
1) "wangwu"
  
2) "lisi"
  
3) "zhangsan"
  
4) "liuli"
  
redis 127.0.0.1:6379> zrevrangebyscore score 10000 0 withscores limit 0, 2
  
1) "wangwu"
  
2) "249"
  
3) "lisi"
  
4) "240"
  注意:max在min之前
  g)zrank
  语法:zrank key member
  解释:根据score从低到高,返回member在有续集中的index
redis 127.0.0.1:6379> zrange score 0 -1  
1) "liuli"
  
2) "zhangsan"
  
3) "lisi"
  
4) "wangwu"
  
redis 127.0.0.1:6379> zrank score liuli
  
(integer) 0
  
redis 127.0.0.1:6379> zrank score wangwu
  
(integer) 3
  h)zrevrank
  语法:zrevrank key member
  解释:根据score从高到低排序,返回member在有序集key中的index
redis 127.0.0.1:6379> zrange score 0 -1  
1) "liuli"
  
2) "zhangsan"
  
3) "lisi"
  
4) "wangwu"
  
redis 127.0.0.1:6379> zrevrank score liuli
  
(integer) 3
  
redis 127.0.0.1:6379> zrevrank score wangwu
  
(integer) 0
  i)zcard
  语法:zcard key
  解释:返回有续集key的基数 (数量或则说长度)
redis 127.0.0.1:6379> zcard score  
(integer) 4
  
redis 127.0.0.1:6379> zcard stdu  #有续集不存在返回0
  
(integer) 0
  3)update
  a)zincrby
  语法:zincrby key increment member
  解释:有续集key的member增加增量increment,返回增加后的score
redis 127.0.0.1:6379> zscore score liuli  
"100"
  
redis 127.0.0.1:6379> zincrby score 300 liuli
  
"400"
  
redis 127.0.0.1:6379> zscore score liuli
  
"400"
  
redis 127.0.0.1:6379>zincrby score 500 xie
  
"500"
  注意:如果member在key中不存在,则新增个member
  4)delete
  a)zrem
  语法:zrem key member [member ...]
  解释:移除有续集中的一个或多个member,返回移除member的个数
redis 127.0.0.1:6379> zrange score 0 -1  
1) "zhangsan"
  
2) "lisi"
  
3) "wangwu"
  
4) "liuli"
  
5) "xie"
  
redis 127.0.0.1:6379> zrem score xie wwww  #www不存在
  
(integer) 1
  
redis 127.0.0.1:6379> zrange score 0 -1
  
1) "zhangsan"
  
2) "lisi"
  
3) "wangwu"
  
4) "liuli"
  注意:如果member不存在,则忽略
  b)zremrangebyrank
  语法:zremrangebyrank key start stop
  解释:移除有续集中指定排名范围【start stop】的元素,返回移除元素个数
redis 127.0.0.1:6379> zrange score 0 -1  
1) "zhangsan"
  
2) "lisi"
  
3) "wangwu"
  
4) "liuli"
  
redis 127.0.0.1:6379> zremrangebyrank score 0 1
  
(integer) 2
  
redis 127.0.0.1:6379> zrange score 0 -1
  
1) "wangwu"
  
2) "liuli"
  注意:如果stop在start之前,则移除0个
  c)zremrangebyscore
  语法:zremrangebyscore key min max
  解释:移除有续集中的member,移除member的score大于等于min小于等于max;返回移除元素个数
redis 127.0.0.1:6379> zrange score 0 -1 withscores  
1) "wangwu"
  
2) "249"
  
3) "liuli"
  
4) "400"
  
redis 127.0.0.1:6379> zremrangebyscore score 248 250
  
(integer) 1
  
redis 127.0.0.1:6379> zrange score 0 -1 withscores
  
1) "liuli"
  
2) "400"
  5)其他
  a)zinterstore
  语法:zinterstore destination numkeys  key[key...] [weights weight] [aggregate sum|min|max]
  解释:统计多个有续集的交集,其中有续集key的个数必须以numkeys参数指定,并将统计结果存储到destination。默认情况下,destination中元素的score是各个有续集key中元素的score之和。使用weights为每个有续集指定个乘法因子,每个有续集的score在传递给集合函数(aggregate)之前,先乘以乘法因子。如果没指定乘法因子weight,默认是1;使用aggregate选项指定交集的聚合方式。min,最小score,max,最大score,sum,求和。
redis 127.0.0.1:6379> zrange score 0 -1 withscores  
1) "lisi"
  
2) "20"
  
3) "liuli"
  
4) "400"
  
redis 127.0.0.1:6379> zrange score1 0 -1 withscores
  
1) "wangwu"
  
2) "20"
  
3) "liuli"
  
4) "30"
  
redis 127.0.0.1:6379> zinterstore dest 2 score score1 #交集求和 sum(score.member.score * 1 + score1.member.score * 1)
  
(integer) 1
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "liuli"
  
2) "430"
  
redis 127.0.0.1:6379> zinterstore dest 2 score score1 weights 1 2 #交集求和,sum(score.member.score * 1 + score1.member.score * 2)
  
(integer) 1
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "liuli"
  
2) "460"
  
redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate min #交集求最小值,min(score.member.score * 1 , score1.member.score * 1)
  
(integer) 1
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "liuli"
  
2) "30"
  
redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate max #交集求最大值 max(score.member.score * 1 , score1.member.score * 1)
  
(integer) 1
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "liuli"
  
2) "400"
  
redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate sum  #交集求和,sum(score.member.score * 1 , score1.member.score * 1)
  
(integer) 1
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "liuli"
  
2) "430"
  
redis 127.0.0.1:6379> zinterstore dest 2 score score1 weights 1 2 aggregate min #交集求最小值 min(score.member.score * 1 , score1.member.score * 2)
  
(integer) 1
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "liuli"
  
2) "60"
  b)zunionstore
  语法:zunionstore destination numkeys  key[key...] [weights weight] [aggregate sum|min|max]
  解释:统计多个有续集的并集,其中有续集key的个数必须以numkeys参数指定,并将统计结果存储到destination。。默认情况下,destination中元素的score是各个有续集key中元素的score之和。weights指定乘法因子,aggregate指定聚合方式,详情,请参阅 zinterstore 中介绍
redis 127.0.0.1:6379> zrange score 0 -1 withscores  
1) "lisi"
  
2) "20"
  
3) "liuli"
  
4) "400"
  
redis 127.0.0.1:6379> zrange score1 0 -1 withscores
  
1) "wangwu"
  
2) "20"
  
3) "liuli"
  
4) "30"
  
redis 127.0.0.1:6379> zunionstore dest 2 score score1 #交集求和 sum(score.member.score * 1 , score1.member.score * 1)
  
(integer) 3
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "lisi"
  
2) "20"
  
3) "wangwu"
  
4) "20"
  
5) "liuli"
  
6) "430"
  
redis 127.0.0.1:6379> zunionstore dest 2 score score1  weights 1 2 aggregate sum #交集求和 sum(score.member.score * 1 , score1.member.score * 2)
  
(integer) 3
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "lisi"
  
2) "20"
  
3) "wangwu"
  
4) "40"
  
5) "liuli"
  
6) "460"
  
redis 127.0.0.1:6379> zunionstore dest 2 score score1  weights 1 2 aggregate max #交集最大值 max(score.member.score * 1 , score1.member.score * 2)
  
(integer) 3
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "lisi"
  
2) "20"
  
3) "wangwu"
  
4) "40"
  
5) "liuli"
  
6) "400"
  
redis 127.0.0.1:6379> zunionstore dest 2 score score1  weights 2 4 aggregate min #交集最小值 min(score.member.score * 2 , score1.member.score * 4)
  
(integer) 3
  
redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  
1) "lisi"
  
2) "40"
  
3) "wangwu"
  
4) "80"
  
5) "liuli"
  
6) "120"
  提醒:sorted set的所有函数,请用下面方式查看
[root@xsf001 ~]# redis-cli  
redis 127.0.0.1:6379> help @sorted_set



运维网声明 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-631556-1-1.html 上篇帖子: redis 的操作 下篇帖子: 通过Keepalived实现Redis Failover自动故障切换功能[实践分享]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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