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

  1. [root@xsf001 ~]# redis-cli
  2. redis 127.0.0.1:6379> ZADD score 230 zhangsan
  3. (integer) 1
  4. redis 127.0.0.1:6379> zadd score 240 lisi 250 wangwu
  5. (integer) 2
  6. redis 127.0.0.1:6379> zadd score 100 liuli
  7. redis 127.0.0.1:6379> zadd score 249 wangwu
  8. (integer) 0

注意:有些redis版本,只能一次添加一个member

2)select

a)zrange

语法:zrange key start stop [withscores]

解释:返回有续集key中指定范围【通过索引 start stop】的member[及其score];

  1. redis 127.0.0.1:6379> zrange score 0 -1  #所有元素
  2. 1) "liuli"
  3. 2) "zhangsan"
  4. 3) "lisi"
  5. 4) "wangwu"
  6. redis 127.0.0.1:6379> zrange score 0 -1 withscores  #所有member及score
  7. 1) "liuli"
  8. 2) "100"
  9. 3) "zhangsan"
  10. 4) "230"
  11. 5) "lisi"
  12. 6) "240"
  13. 7) "wangwu"
  14. 8) "249"
  15. redis 127.0.0.1:6379> zrange score 0 2 withscores  #前三个元素
  16. 1) "liuli"
  17. 2) "100"
  18. 3) "zhangsan"
  19. 4) "230"
  20. 5) "lisi"
  21. 6) "240"
  22. redis 127.0.0.1:6379> zrange score 0 -2  #第一个元素到
  23. 1) "liuli"
  24. 2) "zhangsan"
  25. 3) "lisi"

注意:0,表示第一个元素,-1 表示最后一个元素,-2 表示倒数第二个元素

b)zcount

语法:zcount key min max

解释:统计key中score值介于min 和max之间的member个数

  1. redis 127.0.0.1:6379> zrange score 0 -1 withscores
  2. 1) "liuli"
  3. 2) "100"
  4. 3) "zhangsan"
  5. 4) "230"
  6. 5) "lisi"
  7. 6) "240"
  8. 7) "wangwu"
  9. 8) "249"
  10. redis 127.0.0.1:6379> zcount score 230 240  # count(score >=230 && score <=240)
  11. (integer) 2

c) zscore

语法:zscore key member

解释:返回有续集key中member的score

  1. redis 127.0.0.1:6379> zscore score liuli
  2. "100"

d)zrevrange

语法:zrevrange key start stop [withscores]

解释:返回有续集key中指定范围[通过索引start stop]的member[及score],返回member根据score按降序排列

  1. redis 127.0.0.1:6379> zrevrange score 0 -1 withscores
  2. 1) "wangwu"
  3. 2) "249"
  4. 3) "lisi"
  5. 4) "240"
  6. 5) "zhangsan"
  7. 6) "230"
  8. 7) "liuli"
  9. 8) "100"
  10. redis 127.0.0.1:6379> zrevrange score 1 -2
  11. 1) "lisi"
  12. 2) "zhangsan"

注意:索引0 表示第一个元素,-1 最后一个元素,-2 倒数第二个元素;依次类推

e)zrangebyscore

语法:zrangebyscore key min max [withscores] [limit offset count]

解释:返回有续集key中,score大于等于min并且小于等于max的member。返回结果按照score递增的次序排列。可选withscores决定返回结果集中仅仅返回member还是返回member和score;可选参数limit 指定返回结果的数量区间。

  1. redis 127.0.0.1:6379> zrangebyscore score 100 10000 withscores
  2. 1) "liuli"
  3. 2) "100"
  4. 3) "zhangsan"
  5. 4) "230"
  6. 5) "lisi"
  7. 6) "240"
  8. 7) "wangwu"
  9. 8) "249"
  10. redis 127.0.0.1:6379> zrangebyscore score 100 10000  limit 1 3
  11. 1) "zhangsan"
  12. 2) "lisi"
  13. 3) "wangwu"

f)zrevrangebyscore

语法:zrevrangescore key max min [withscores] [limit offset count]

解释:返回有续集key中score<=max并且score>=min 的元素,返回结果根据score从大到小顺序排列。可选参数withscores决定结果集中是否包含score,可选参数limit 指定返回结果集范围。

  1. redis 127.0.0.1:6379> zrevrangebyscore score 0 10000
  2. (empty list or set)
  3. redis 127.0.0.1:6379> zrevrangebyscore score 10000 0
  4. 1) "wangwu"
  5. 2) "lisi"
  6. 3) "zhangsan"
  7. 4) "liuli"
  8. redis 127.0.0.1:6379> zrevrangebyscore score 10000 0 withscores limit 0, 2
  9. 1) "wangwu"
  10. 2) "249"
  11. 3) "lisi"
  12. 4) "240"

注意:max在min之前

g)zrank

语法:zrank key member

解释:根据score从低到高,返回member在有续集中的index

  1. redis 127.0.0.1:6379> zrange score 0 -1
  2. 1) "liuli"
  3. 2) "zhangsan"
  4. 3) "lisi"
  5. 4) "wangwu"
  6. redis 127.0.0.1:6379> zrank score liuli
  7. (integer) 0
  8. redis 127.0.0.1:6379> zrank score wangwu
  9. (integer) 3

h)zrevrank

语法:zrevrank key member

解释:根据score从高到低排序,返回member在有序集key中的index

  1. redis 127.0.0.1:6379> zrange score 0 -1
  2. 1) "liuli"
  3. 2) "zhangsan"
  4. 3) "lisi"
  5. 4) "wangwu"
  6. redis 127.0.0.1:6379> zrevrank score liuli
  7. (integer) 3
  8. redis 127.0.0.1:6379> zrevrank score wangwu
  9. (integer) 0

i)zcard

语法:zcard key

解释:返回有续集key的基数

  1. redis 127.0.0.1:6379> zcard score
  2. (integer) 4
  3. redis 127.0.0.1:6379> zcard stdu  #有续集不存在返回0
  4. (integer) 0

3)update

a)zincrby

语法:zincrby key increment member

解释:有续集key的member增加增量increment,返回增加后的score

  1. redis 127.0.0.1:6379> zscore score liuli
  2. "100"
  3. redis 127.0.0.1:6379> zincrby score 300 liuli
  4. "400"
  5. redis 127.0.0.1:6379> zscore score liuli
  6. "400"
  7. redis 127.0.0.1:6379> <span style="font-family: Arial, Helvetica, sans-serif;">zincrby </span>score 500 xie
  8. "500"

注意:如果member在key中不存在,则新增个member

4)delete

a)zrem

语法:zrem key member [member ...]

解释:移除有续集中的一个或多个member,返回移除member的个数

  1. redis 127.0.0.1:6379> zrange score 0 -1
  2. 1) "zhangsan"
  3. 2) "lisi"
  4. 3) "wangwu"
  5. 4) "liuli"
  6. 5) "xie"
  7. redis 127.0.0.1:6379> zrem score xie wwww  #www不存在
  8. (integer) 1
  9. redis 127.0.0.1:6379> zrange score 0 -1
  10. 1) "zhangsan"
  11. 2) "lisi"
  12. 3) "wangwu"
  13. 4) "liuli"

注意:如果member不存在,则忽略

b)zremrangebyrank

语法:zremrangebyrank key start stop

解释:移除有续集中指定排名范围【start stop】的元素,返回移除元素个数

  1. redis 127.0.0.1:6379> zrange score 0 -1
  2. 1) "zhangsan"
  3. 2) "lisi"
  4. 3) "wangwu"
  5. 4) "liuli"
  6. redis 127.0.0.1:6379> zremrangebyrank score 0 1
  7. (integer) 2
  8. redis 127.0.0.1:6379> zrange score 0 -1
  9. 1) "wangwu"
  10. 2) "liuli"

注意:如果stop在start之前,则移除0个

c)zremrangebyscore

语法:zremrangebyscore key min max

解释:移除有续集中的member,移除member的score大于等于min小于等于max;返回移除元素个数

  1. redis 127.0.0.1:6379> zrange score 0 -1 withscores
  2. 1) "wangwu"
  3. 2) "249"
  4. 3) "liuli"
  5. 4) "400"
  6. redis 127.0.0.1:6379> zremrangebyscore score 248 250
  7. (integer) 1
  8. redis 127.0.0.1:6379> zrange score 0 -1 withscores
  9. 1) "liuli"
  10. 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,求和。

  1. redis 127.0.0.1:6379> zrange score 0 -1 withscores
  2. 1) "lisi"
  3. 2) "20"
  4. 3) "liuli"
  5. 4) "400"
  6. redis 127.0.0.1:6379> zrange score1 0 -1 withscores
  7. 1) "wangwu"
  8. 2) "20"
  9. 3) "liuli"
  10. 4) "30"
  11. redis 127.0.0.1:6379> zinterstore dest 2 score score1 #交集求和 sum(score.member.score * 1 + score1.member.score * 1)
  12. (integer) 1
  13. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  14. 1) "liuli"
  15. 2) "430"
  16. redis 127.0.0.1:6379> zinterstore dest 2 score score1 weights 1 2 #交集求和,sum(score.member.score * 1 + score1.member.score * 2)
  17. (integer) 1
  18. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  19. 1) "liuli"
  20. 2) "460"
  21. redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate min #交集求最小值,min(score.member.score * 1 , score1.member.score * 1)
  22. (integer) 1
  23. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  24. 1) "liuli"
  25. 2) "30"
  26. redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate max #交集求最大值 max(score.member.score * 1 , score1.member.score * 1)
  27. (integer) 1
  28. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  29. 1) "liuli"
  30. 2) "400"
  31. redis 127.0.0.1:6379> zinterstore dest 2 score score1 aggregate sum  #交集求和,sum(score.member.score * 1 , score1.member.score * 1)
  32. (integer) 1
  33. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  34. 1) "liuli"
  35. 2) "430"
  36. 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)
  37. (integer) 1
  38. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  39. 1) "liuli"
  40. 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 中介绍

  1. redis 127.0.0.1:6379> zrange score 0 -1 withscores
  2. 1) "lisi"
  3. 2) "20"
  4. 3) "liuli"
  5. 4) "400"
  6. redis 127.0.0.1:6379> zrange score1 0 -1 withscores
  7. 1) "wangwu"
  8. 2) "20"
  9. 3) "liuli"
  10. 4) "30"
  11. redis 127.0.0.1:6379> zunionstore dest 2 score score1 #交集求和 sum(score.member.score * 1 , score1.member.score * 1)
  12. (integer) 3
  13. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  14. 1) "lisi"
  15. 2) "20"
  16. 3) "wangwu"
  17. 4) "20"
  18. 5) "liuli"
  19. 6) "430"
  20. 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)
  21. (integer) 3
  22. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  23. 1) "lisi"
  24. 2) "20"
  25. 3) "wangwu"
  26. 4) "40"
  27. 5) "liuli"
  28. 6) "460"
  29. 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)
  30. (integer) 3
  31. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  32. 1) "lisi"
  33. 2) "20"
  34. 3) "wangwu"
  35. 4) "40"
  36. 5) "liuli"
  37. 6) "400"
  38. 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)
  39. (integer) 3
  40. redis 127.0.0.1:6379> zrange dest 0 -1 withscores
  41. 1) "lisi"
  42. 2) "40"
  43. 3) "wangwu"
  44. 4) "80"
  45. 5) "liuli"
  46. 6) "120"

提醒:sorted set的所有函数,请用下面方式查看

    1. [root@xsf001 ~]# redis-cli
    2. redis 127.0.0.1:6379> help @sorted_set

Redis系列-存储篇sorted set主要操作函数小结的更多相关文章

  1. Redis系列-存储篇sorted set主要操作命令

    Redis系列-存储篇sorted set主要操作函数小结 redis支持有序集合,即sorted set.sorted set在set的基础上,增加了排序属性,是set的升级版.这里简要谈谈sort ...

  2. Redis系列-存储篇string主要操作命令

    Redis系列-存储篇string主要操作命令 通过上两篇的介绍,我们的redis服务器基本跑起来.db都具有最基本的CRUD功能,我们沿着这个脉络,开始学习redis丰富的数据结构之旅,当然先从最简 ...

  3. Redis系列-存储篇list主要操作命令

    Redis系列-存储篇list主要操作命令小结 在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素 ...

  4. Redis系列-存储篇string主要操作函数小结

    通过上两篇的介绍,我们的redis服务器基本跑起来.db都具有最基本的CRUD功能,我们沿着这个脉络,开始学习redis丰富的数据结构之旅,当然先从最简单且常用的string开始. 1.新增 a)se ...

  5. Redis系列-存储篇set主要操作函数小结

    最近,总是以“太忙“为借口,很久没有blog了,凡事贵在恒,希望我能够坚持不懈,毕竟在blog的时候,也能提升自己.废话不说了,直奔主题”set“ redis set 是string类型对象的无序集合 ...

  6. Redis系列-存储篇hash主要操作函数小结

    阳光透过玻璃,洒在身上,一杯暖茶在手,说不尽的安逸自得,让我有种想再写篇blog的冲动.上篇主要谈了string,这里谈谈hash吧!hash是一些列key value(field value)的映射 ...

  7. Redis系列-存储篇list主要操作函数小结

    在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素:列表最左端第一个元素. 表尾元素:列表最右端的 ...

  8. Redis系列-存储篇list主要操作函数小结(转)

    在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素:列表最左端第一个元素. 表尾元素:列表最右端的 ...

  9. Redis系列-存储hash主要操作命令

    Redis系列-存储篇hash主要操作函数小结 hash是一些列key value(field value)的映射表.常常用其存储一些对象实例.相对于把一个对象的各个字段存储为string,存储为ha ...

随机推荐

  1. Python类、模块、包的区别

    类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...

  2. Java编程思想学习笔记_2(继承和多态)

    静态初始化: 静态初始化只在必要的时刻进行.(即当程序需要加载类进入内存的时候,执行静态初始化.静态变量和静态代码块的初始化顺序,按照在代码中声明的顺序老执行.例如:如果要执行某个public类,那么 ...

  3. Fragments

    http://developer.android.com/guide/components/fragments.html#Design Content Design Philosophy Creati ...

  4. LA 5135 Mining Your Own Business

    求出 bcc 后再……根据大白书上的思路即可. 然后我用的是自定义的 stack 类模板: #include<cstdio> #include<cstring> #includ ...

  5. windows服务名称不是单个单词的如何启动?

    比如要启动  Memcached Server: 命令行中输入命令要注意大小写,大小写要保持一致,正确的写法如下: net  start  "Memcached Server". ...

  6. hiho1099_constellation

    题目 一 个NxM(N, M <= 1000)的矩阵形成星空,矩阵中的点有两种字符,'#'代表星星,'.'代表空白,星空中的星星最多5000个:给出K(K<=20)个星图,每 个星图都是H ...

  7. 《云中歌》孟石头泡妞大法独家放送,单身汪get起来!!

    谁说古代文人雅士只会诗词歌赋.琴棋书画?作为“玉中之王”的公子哥——孟石头泡妞可是个中高手,总结起来都能出一本“泡妞宝典”了,单身的乃们还不赶紧学起来! 第一步:假装自来熟相识,马上开启约会模式 看到 ...

  8. linux笔记:文件编辑器vim

    vim的3种工作模式: 在命令模式下进入插入模式: 定位命令: 删除命令: 复制和剪切命令: 替换和取消命令: 查找和替换命令: 保存和退出命令: 导入命令执行结果和定义快捷键:

  9. OI中的代码调试

    作为一位OIer,代码调试的能力必不可少. 今天梳理一下自己进行代码调试的方法,下面只是一些个人的总结. 代码的评价有三部分: 正确性 强健性 高效性 检查也应该从这三部分出发. [正确性] 打完代码 ...

  10. 配置electron

    配置语句: git clone https://github.com/electron/electron-quick-start 文件夹名字 打开该文件(我用的webstorm)