美文网首页
Redis5数据类型5-SortedSet集合

Redis5数据类型5-SortedSet集合

作者: 轻轻敲醒沉睡的心灵 | 来源:发表于2022-03-18 09:31 被阅读0次

    1. SortedSet集合介绍

    SortedSet集合与Set集合类似,有以下特点:

    • 数据是有序的,无重复的
    • 每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同,此时按照元素的字典序排序
    • 元素是字符串类型
    • 最多包含232-1个元素

    2. SortedSet指令

    2.1 增加一个或多个元素

    zadd key score member [score member ...]

    127.0.0.1:6379> zadd letters 10 a
    1
    127.0.0.1:6379> zadd letters 9 b 8 c 7.1 d 6.5 e 6.4 f 6.3 g
    6
    127.0.0.1:6379> zadd letters 6.2 g
    0
    127.0.0.1:6379>
    

    2.2 返回集合中元素个数

    • zcard key
    • zcount key min max 查询指定分值内元素个数
    127.0.0.1:6379> zcard letters
    5
    127.0.0.1:6379> zcount letters 7 9
    3
    127.0.0.1:6379>
    

    2.3 查询指定索引区间元素

    zrange key start stop start和stop是按照score从小到大,如果score相同,则按照字典序
    带着 withscores 会显示分值
    zrevrange key start stop 按照score从大到小排列

    127.0.0.1:6379> zrange letters 0 -1
    g
    f
    e
    d
    c
    b
    a
    127.0.0.1:6379> zrevrange letters 0 -1
    a
    b
    c
    d
    e
    f
    g
    127.0.0.1:6379> zrange letters 2 4
    e
    d
    c
    127.0.0.1:6379>
    

    2.4 移除一个或者多个元素

    zrem key member [member ...] 元素不存在,自动忽略

    127.0.0.1:6379> zrem letters g
    1
    127.0.0.1:6379> zrange letters 0 -1
    f
    e
    d
    c
    b
    a
    127.0.0.1:6379> zrem letters f g
    1
    127.0.0.1:6379> zrange letters 0 -1
    e
    d
    c
    b
    a
    127.0.0.1:6379>
    

    2.5 显示分值

    zscore key member

    127.0.0.1:6379> zscore letters c
    8
    127.0.0.1:6379>
    

    注意:计算机并不能精确表达每一个浮点数,都是一种近似表达,所以有时候会显示出好多位小数

    2.6 增加或者减少分值

    zincrby key increment member increment为正数就是增加,为负数就是减少,可以用浮点型

    127.0.0.1:6379> zincrby letters 1.8 c
    9.8000000000000007
    127.0.0.1:6379> zscore letters c
    9.8000000000000007
    127.0.0.1:6379> zincrby letters -5.6 c
    4.2000000000000011
    127.0.0.1:6379> zscore letters c
    4.2000000000000011
    127.0.0.1:6379>
    

    2.7 返回元素的排名(索引)

    zrank key member 升序的排名
    zrevrank key member 降序的排名

    127.0.0.1:6379> zrank letters c
    0
    127.0.0.1:6379> zrevrank letters c
    4
    127.0.0.1:6379>
    

    2.8 返回指定分值区间元素

    • zrankbyscore key min max [WITHSCORES] [LIMIT offset count]
      类似于mysql的语法,开区间使用左小括号(,-inf和+inf表示负无穷和正无穷
    • zrevrankbyscore key min max [WITHSCORES] [LIMIT offset count]
    127.0.0.1:6379> zrangebyscore letters 6 10
    e
    d
    b
    a
    127.0.0.1:6379> zrangebyscore letters (7.1 10
    b
    a
    127.0.0.1:6379> zrangebyscore letters (7.1 (10
    b
    127.0.0.1:6379> zrangebyscore letters -inf +inf
    c
    e
    d
    b
    a
    127.0.0.1:6379> zrangebyscore letters -inf +inf limit 1 3
    e
    d
    b
    127.0.0.1:6379>
    

    2.9 条件移除

    • 移除指定排名范围的元素
      zremrangebyrank key start stop
    • 移除指定分值范围的元素
      zremrangebyscore key min max
    127.0.0.1:6379> zremrangebyrank letters 0 1
    2
    127.0.0.1:6379> zcard letters
    3
    127.0.0.1:6379> zremrangebyscore letters 9.5 10.5
    1
    127.0.0.1:6379> zcard letters
    2
    127.0.0.1:6379> zrange letters 0 -1
    d
    b
    127.0.0.1:6379>
    

    2.10 并集

    zunionstore destination numkeys key [key ...] [weights weight] [aggregate SUM|MIN|MAX]
    numkeys指定key的数量,必须写,几个key合并就是几
    weights选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重
    aggregate选项,指定并集结果的聚合方式

    • SUM:将所有集合中相同元素的score值之和作为结果集中该成员的score值,默认是这种方式
    • MIN:将所有集合中相同元素的score值中最小值作为结果集中该成员的score值
    • MAX:将所有集合中相同元素的score值中最大值作为结果集中该成员的score值
    127.0.0.1:6379> zadd t1 90 a 80 b 70 c
    3
    127.0.0.1:6379> zadd t2 85 c 75 d 65 e 55 f
    4
    127.0.0.1:6379> zunionstore t3 2 t1 t2
    6
    127.0.0.1:6379> zrange t3 0 1000 withscores
    f
    55
    e
    65
    d
    75
    b
    80
    a
    90
    c
    155
    127.0.0.1:6379> zunionstore t4 2 t1 t2 aggregate max
    6
    127.0.0.1:6379> zrange t4 0 100 withscores
    f
    55
    e
    65
    d
    75
    b
    80
    c
    85
    a
    90
    127.0.0.1:6379>
    

    2.11 交集

    zinterstore destination numkeys key [key ...] [weights weight] [aggregate SUM|MIN|MAX]

    127.0.0.1:6379> zinterstore t5 2 t1 t2 aggregate max
    1
    127.0.0.1:6379> zrange t5 0 100 withscores
    c
    85
    127.0.0.1:6379>
    

    3. SortedSet集合用处

    因SortedSet集合是有序的,因此可以统计一些排名的。例如:云音乐的音乐排行榜、每天的笔记(以时间戳作为score)、热门消息、图书畅销榜等

    相关文章

      网友评论

          本文标题:Redis5数据类型5-SortedSet集合

          本文链接:https://www.haomeiwen.com/subject/irupdrtx.html