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

[经验分享] 系统学习redis之七——redis数据类型之zset数据类型及操作

[复制链接]

尚未签到

发表于 2018-11-2 07:14:29 | 显示全部楼层 |阅读模式
sourted sets数据类型介绍
  sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性。这一属性在修改元素的时候可以指定,每次指定后,zset会自动按照新的值调整顺序,是有序集合。可以理解为有两列的MySQL表,一列存value,一列存顺序。操作中key理解为zset的名字。

zset数据类型方法


  • zadd:向指定集合zset中添加元素member,score用于排序,如果该元素已经存在,则更新其顺序
  • zrange:查看sourted sets里面的所有元素
  • zrem:删除名称为key的zset中的元素member(即删除指定zset里面的指定元素)
  • zincrby:如果在某一个zset中已经存在元素member,则该元素的score增加increment。否则向该集合中添加该元素,其score的值就为指定的increment值
  • zrank:返回某一个zset中指定元素的索引值(不是插入的时候指定的那个顺序值,是元素的下标)。这个索引值是按照元素的score值从小到大排列的,score值越小,索引值(下标)就越小,score值越大,索引值(下标)就越大
  • zrevrank:返回某一个zset中指定元素的索引值(不是插入的时候指定的那个顺序值,是元素的下标)。这个索引值是按照元素的score值从大到小排列的,score值越小,索引值(下标)就越大,score值越大,索引值(下标)就越小
  • zrevrange:返回某一个zset集合中的指定区间的元素及其顺序值,按照score值从大到小降序排列,与zrange相反
  • zrangebyscore:返回集合中指定顺序值区间的元素
  • zcount:返回集合中指定顺序值区间的元素总数量
  • zcard:返回集合中的所有元素个数
  • zremrangebyrank:删除在集合中排名在给定索引值(下标)区间的元素(注意:是按照索引值删除,这里不是顺序值)
  • zremrangebyscore:删除在集合中排名在给定顺序值区间的元素(注意:是按照顺序值删除,这里不是索引值)
方法及操作
  1)zadd:向指定集合zset中添加元素member,score用于排序,如果该元素已经存在,则更新其顺序
  例如:向sset1中添加one和two两个元素并指定顺序
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZADD sset1 1 one    #向sset1中添加元素“one”,并指定顺序为1
  
(integer) 1                         #返回值为1,表示添加成功
  
127.0.0.1:6379> ZADD sset1 2 two    #向sset1中添加元素“two”,并指定顺序为2
  
(integer) 1
  
127.0.0.1:6379> ZADD sset1 3 two    #向sset1中添加元素“two”,并指定顺序为3
  
(integer) 0                     #集合中不能有重复元素,所以这里返回的是0,表示重复添加元素“two”是失败的,但是会刷新元素“two”的顺序,将原来的2改成3
  
127.0.0.1:6379> ZRANGE sset1 0 -1   #查看sset里面的所有元素,这里的0和-1也是代表元素的下标。这里是看不到设置的顺序的,要看顺序,就要加上WITHSCORES
  
1) "one"
  
2) "two"
  
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES        #查看sset的所有元素机器对应的顺序
  
1) "one"
  
2) "1"
  
3) "two"
  
4) "3"      #这里就是第二次添加元素“two”的时候将顺序从2改成了3
  
127.0.0.1:6379>
  

  备注,同《系统学习redis之三——redis数据类型之string类型及操作》一样,后面的例子也都在同一台机器一次性操作完毕的,因为后面的代码如果不加上“ [root@test101 redis-4.0.1]# src/redis-cli ”这一句。代码高亮也会格式有问题,所以后面所有的例子中都加上了“[root@test101 redis-4.0.1]# src/redis-cli ”,只是为了格式问题。
  2)zrange:查看sourted sets里面的所有元素
  例如:上面例子中查看sset1中的全部元素
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset1 0 -1
  
1) "one"
  
2) "two"
  

  3)zrem:删除名称为key的zset中的元素member(即删除指定zset里面的指定元素)
  例如:删除sset1中的元素one
  

[root@test101 redis-4.0.1]# src/redis-cli  
user127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES   #查看当前sset1里面的全部元素
  
1) "one"
  
2) "1"
  
3) "two"
  
4) "3"
  
127.0.0.1:6379> ZREM sset1 one   #删除sset1的元素“one”
  
(integer) 1
  
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES    #再查看sset1的元素,one已经被删除成功
  
1) "two"
  
2) "3"
  
127.0.0.1:6379>
  

  4)zincrby:如果在某一个zset中已经存在元素member,则该元素的score增加increment。否则向该集合中添加该元素,其score的值就为指定的increment值
  例如:给sset1的某个元素增加顺序值
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES  #当前sset1中只有一个元素“two”,顺序为3
  
1) "two"
  
2) "3"
  
127.0.0.1:6379> ZINCRBY sset1 2 two     #给元素“two”的顺序加上2
  
"5"     #返回的就是元素“two”的顺序被增加之后的值
  
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES            #再查看sset1的值,two的顺序已经变成了5
  
1) "two"
  
2) "5"
  
127.0.0.1:6379> ZINCRBY sset1 -1 two        #当值变成负值,顺序值就会减小
  
"4"
  
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES
  
1) "two"
  
2) "4"
  
127.0.0.1:6379> ZINCRBY sset1 2 one     #给sset1中的元素“one”增加元素值2.因为sset1中不存在元素"one",所以这里会插入元素“one”,并设置期顺序值为2
  
"2"
  
127.0.0.1:6379> ZRANGE sset1 0 -1 WITHSCORES    #查看当前sset1的所有元素
  
1) "one"
  
2) "2"
  
3) "two"
  
4) "4"
  
127.0.0.1:6379>
  

  5)zrank:返回某一个zset中指定元素的索引值(不是插入的时候指定的那个顺序值,是元素的下标)。这个索引值是按照元素的score值从小到大排列的,score值越小,索引值(下标)就越小,score值越大,索引值(下标)就越大
  例如:查看sset2中元素“two”的索引值
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
  
1) "one"
  
2) "1"
  
3) "two"    #插入two,设置的顺序值是2
  
4) "2"
  
5) "three"
  
6) "3"
  
127.0.0.1:6379> ZRANK sset2 two  #返回元素“two”的索引值,即下标
  
(integer) 1     #这里的1就是表示元素“two”的索引值(下标)。one的下标是0,two的下标就是1
  
127.0.0.1:6379>
  

  6)zrevrank:返回某一个zset中指定元素的索引值(不是插入的时候指定的那个顺序值,是元素的下标)。这个索引值是按照元素的score值从大到小排列的,score值越小,索引值(下标)就越大,score值越大,索引值(下标)就越小
  例如:用zrevrank查看sset2中各元素的下标值
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
  
1) "one"
  
2) "1"
  
3) "two"
  
4) "2"
  
5) "three"
  
6) "3"
  
127.0.0.1:6379> ZREVRANK sset2 one  #元素“one”的score值最小,索引值最大
  
(integer) 2
  
127.0.0.1:6379> ZREVRANK sset2 two
  
(integer) 1
  
127.0.0.1:6379> ZREVRANK sset2 three  #元素“three”的score值最大,索引值最小
  
(integer) 0
  
127.0.0.1:6379>
  

  7)zrevrange:返回某一个zset集合中的指定区间的元素及其顺序值,按照score值从大到小降序排列,与zrange相反
  例如:使用zrevrange返回sset2中所有的元素及其顺序值
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES   #先用zrange查看sset2中的元素及其顺序值,是按照从小到大升序排列的
  
1) "one"
  
2) "1"
  
3) "two"
  
4) "2"
  
5) "three"
  
6) "3"
  
127.0.0.1:6379>
  
127.0.0.1:6379> ZREVRANGE sset2 0 -1 WITHSCORES  #先用zrevrang查看sset2中的元素及其顺序值,是按照从大到小降序排列的
  
1) "three"
  
2) "3"
  
3) "two"
  
4) "2"
  
5) "one"
  
6) "1"
  

  8)zrangebyscore:返回集合中指定顺序值区间的元素
  例如:返回sset2中指定顺序值区间的元素
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES   #查看sset2中所有元素及其顺序值
  
1) "one"
  
2) "1"
  
3) "two"
  
4) "2"
  
5) "three"
  
6) "3"
  
127.0.0.1:6379> ZRANGEBYSCORE sset2 1 2 WITHSCORES   #查看sset2中顺序值为1到2的元素
  
1) "one"
  
2) "1"
  
3) "two"
  
4) "2"
  
127.0.0.1:6379> ZRANGEBYSCORE sset2 2 3 WITHSCORES   #查看sset2中顺序值为2到3的元素
  
1) "two"
  
2) "2"
  
3) "three"
  
4) "3"
  
127.0.0.1:6379>
  
127.0.0.1:6379> ZRANGEBYSCORE sset2 1 3 WITHSCORES    #查看sset2中顺序值为1到3的元素
  
1) "one"
  
2) "1"
  
3) "two"
  
4) "2"
  
5) "three"
  
6) "3"
  
127.0.0.1:6379>
  

  9)zcount:返回集合中指定顺序值区间的元素总数量
  例如:返回sset2中指定顺序值区间的元素数量
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES        查看sset2中所有元素及其顺序值
  
1) "one"
  
2) "1"
  
3) "two"
  
4) "2"
  
5) "three"
  
6) "3"
  
127.0.0.1:6379> ZCOUNT sset2 1 2    #查看sset2中顺序值从1到2的元素个数
  
(integer) 2         #这里的2就代表的元素个数
  
127.0.0.1:6379> ZCOUNT sset2 2 3  #查看sset2中顺序值从2到3的元素个数
  
(integer) 2
  
127.0.0.1:6379> ZCOUNT sset2 1 3   #查看sset2中顺序值从1到3的元素个数
  
(integer) 3
  
127.0.0.1:6379>
  

  10)zcard:返回集合中的所有元素个数
  例如:查看sset2中所有元素个数
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset2 0 -1       #查看sset2中所有元素,总共3个
  
1) "one"
  
2) "two"
  
3) "three"
  
127.0.0.1:6379> ZCARD sset2     #使用zcard返回sset2中元素总数
  
(integer) 3         #这里的3就表示元素总数量
  
127.0.0.1:6379>
  

  11)zremrangebyrank:删除在集合中排名在给定索引值(下标)区间的元素(注意:是按照索引值删除,这里不是顺序值)
  例如:删除sset2中是定索引区间的元素
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES    #当前sset2中所有元素
  1) "one"
  2) "1"
  3) "two"
  4) "2"
  5) "three"
  6) "3"
  7) "four"
  8) "4"
  9) "five"
  
10) "5"
  
127.0.0.1:6379> ZREMRANGEBYRANK sset2 3 4    #删除索引值从3到4这个区间的元素
  
(integer) 2       #2表示删除元素的个数
  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES     #索引值从0开始,元素“four”的索引值是3,元素“five”的索引值是4,都给删除了
  
1) "one"
  
2) "1"
  
3) "two"
  
4) "2"
  
5) "three"
  
6) "3"
  
127.0.0.1:6379> ZREMRANGEBYRANK sset2 1 1   #索引区间的开始值和结束值可以是一样的,就只删除1个元素
  
(integer) 1
  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES    #索引值为1的元素“two”给删除了
  
1) "one"
  
2) "1"
  
3) "three"
  
4) "3"
  
127.0.0.1:6379>
  

  12)zremrangebyscore:删除在集合中排名在给定顺序值区间的元素(注意:是按照顺序值删除,这里不是索引值)
  例如:删除sset2中是定顺序区间的元素
  

[root@test101 redis-4.0.1]# src/redis-cli  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES   #当前sset2中所有元素
  1) "one"
  2) "1"
  3) "two"
  4) "2"
  5) "three"
  6) "3"
  7) "four"
  8) "4"
  9) "five"
  
10) "5"
  
127.0.0.1:6379> ZREMRANGEBYSCORE sset2 2 4  #顺序值从1开始,元素“two”的索引值是2,元素“four”的索引值是4,都给删除了
  
(integer) 3
  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
  
1) "one"
  
2) "1"
  
3) "five"
  
4) "5"
  
127.0.0.1:6379> ZREMRANGEBYSCORE sset2 5 5  #顺序区间的开始值和结束值可以是一样的,就只删除1个元素
  
(integer) 1
  
127.0.0.1:6379> ZRANGE sset2 0 -1 WITHSCORES
  
1) "one"
  
2) "1"
  
127.0.0.1:6379>



运维网声明 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-629552-1-1.html 上篇帖子: redis的迁移工具redis-port 下篇帖子: 分布式锁实现大型连续剧之(一):Redis-JavaIT程序员的博客
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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