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


    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

    [plain] view plaincopy
     
    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];

    [plain] view plaincopy
     
    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个数

    [plain] view plaincopy
     
    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

    [plain] view plaincopy
     
    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按降序排列

    [plain] view plaincopy
     
    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 指定返回结果的数量区间。

    [plain] view plaincopy
     
    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 指定返回结果集范围。

    [plain] view plaincopy
     
    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

    [plain] view plaincopy
     
    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

    [plain] view plaincopy
     
    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的基数

    [plain] view plaincopy
     
    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

    [plain] view plaincopy
     
    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的个数

    [plain] view plaincopy
     
    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】的元素,返回移除元素个数

    [plain] view plaincopy
     
    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;返回移除元素个数

    [plain] view plaincopy
     
    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,求和。

    [plain] view plaincopy
     
    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 中介绍

    [plain] view plaincopy
     
    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的所有函数,请用下面方式查看

    [plain] view plaincopy
     
      1. [root@xsf001 ~]# redis-cli   
      2. redis 127.0.0.1:6379> help @sorted_set  
  • 相关阅读:
    OpenCV 立体匹配 (自带程序)
    OpenCV 双目标定 ( 自带的例子)
    容器
    OpenCV 多边形逼近
    C++ 读取文件
    OpenCV 快速连通区域分析
    图像任意旋转
    OpenCV 模板匹配函数matchTemplate详解
    二十一:scrapy中设置下载延时与自动限速
    二十、scrapy中的Request对象和Response对象
  • 原文地址:https://www.cnblogs.com/kingCpp/p/5128743.html
Copyright © 2020-2023  润新知