redis 的使用 (sort set排序集合类型操作)

时间:2021-11-28 17:02:04

sort set排序集合类型

    释义:

        sort set 是 string 类型的集合

        sort set 的每个元素 都会关联一个 权

        通过 权值 可以有序的获取集合中的元素

    应用场合:

        获取热门帖子(回复量)信息:

        select * from message order by backnum desc limit 5;

        // 利用 sort set 实现最热门的前 5 贴信息

        帖子id            回复量(万条)

        11                102
        12                 141
        13                 12
        14                 651
        15                 131
        16                 256
        17                 341
        18                 79
        19                 461
        20                 101

        排序集合中额每个元素都是 值 权 的组合

        sort set 排序集合

        值|权     11|121     22|484    33|1089

    sort set 类型操作

        注意:

        权 score

        值 member

        zadd key score member

            添加元素到集合 元素在集合中存在则更新对应 score

        zrem key member

            删除指定元素 1 表示成功 如果元素不存在 则返回 0

        zincrby key incr member

            按照 incr 幅度增加对应 member 的 score 值, 返回 score 值

        zrank key member

            返回指定元素在集合中的排名(下标), 集合中元素是按 score 从小到大排序的

        zrevrank key member

            返回指定元素在集合中的排名(下标), 集合中元素是按 score 从大到小排序的

        zrange key start end

            从集合中去掉指定区间的元素 返回 按 score 有序结果

        zrevrange key start end

            从集合中去掉指定区间的元素 返回 按 score 逆序的

        zcard key

            返回集合中元素个数

        zscore key element

            返回 给定元素 对应的 score

        zremrangebyrank key min max

            删除集合中排名在给定区间的元素 (权值有小到大排序)

    eg:

    sort set 排序集合 里面只有5个元素信息,

    该5个元素是回复量最高每个帖子被回复的时候,

    就有机会进入该集合里面

    但是 只有回复量最高的前5个帖子会存在于集合中

    回复量低的时候就被删除

    // 创建一个 sort set 排序集合

    // hostmessage 为 key, 内部有5个元素

    zadd hostmasssge 102 11 // (integer) 1
    
    zadd hostmasssge 122 12 // (integer) 1
    
    zadd hostmasssge 142 13 // (integer) 1
    
    zadd hostmasssge 162 14 // (integer) 1
    
    zadd hostmasssge 182 15 // (integer) 1

    // 给集合每增加一个新元素 就把权值(回复值)最低的那个元素删掉

    // 每增加一个新元素 就删除一个旧元素

    /*************************************/

    // 第六个元素生成

    zadd hostmasssge 116 16 // (integer) 1

    // 按 权 -> score 逆序的排列

    zrevrange hostmassage 0 100

        //返回结果如下 (展示数据为:值)

        // 1) "15"

        // 2) "14"

        // 3) "13"

        // 4) "12"

        // 5) "16"

        // 6) "11"

    // 删除 集合中排名在给定区间的元素 (权值有小到大排序)

    // 删除 权 较小的数据 剩余5条

    zremrangebyrank hostmassage 0 0

    zrevrange hostmassage 0 100

        //返回结果如下 (展示数据为:值)

        // 1) "15"

        // 2) "14"

        // 3) "13"

        // 4) "12"

        // 5) "16"

    /*********************************/

    // 返回指定元素在集合中的排名(下标),

    zrank hostmassage 15 // (integer) 4

    zrank hostmassage 16 // (integer) 0

    // 返回 集合中的元素的个数

    zcard hostmessage

        // (integer) 5

    // 根据 值 返回 权(回复量)

    zscore hostmessage 15

        // 返回 "182"

    // 给指定的元素值 增加一些权信息

    zincarby hostmessage 200 14

        // 返回 "362"

    zrevrange hostmessage 0 100

        // 返回结果如下 (展示数据为:值)

        // 1) "14"

        // 2) "15"

        // 3) "13"

        // 4) "12"

        // 5) "16"