Redis数据结构和内部编码--有序集合(SortedSet)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunhuiliang85/article/details/74278849

 Redis数据结构和内部编码--有序集合(SortedSet)

一. 概念

有序集合用来存储多个字符串元素,同时这些元素是有序无重复的。但是它和列表使用索引下标进行排序不同,它给每个元素设置一个分数(SCORE)做为排序依据。有序集合中元素不可以重复,但是元素的分数是可以重复的。此外,有序集合提供了获取指定分数和元素范围查询,计算成员排名等功能。

 

二. 命令
2.1 添加成员

命令:zadd key [nx|xx|ch|incr]score member[score member2…]

返回:成功添加成员的个数

例如:zadd zset1 1 v1 10 v2 20 v3 15 v4

返回:4

 

zadd命令添加了nx|xx|ch|incr四个选项:

nx:member必须不存在,才可以设置成功,用于添加

xx: member必须存在,才可以设置成功,用于修改

ch:返回此次操作后,有序集合元素和分数发生变化的个数

incr:对score做增加

2.2 计算成员个数

命令:zcard key

例如:zadd zset1 1 v1 10 v2 20 v3 15 v4

     zcard zset1

返回:4

2.3 计算某个成员的分数

命令:zscore key member

例如:zadd zset1 1 v1 10 v2 20 v3 15 v4

     zscore zset1 v2

返回:10

2.4 计算成员的排名

 

命令:(1)zrank key member  从低到高返回排名,分数最低的返回排名0

     (2) zrevrank keymember从高到低返回排名,分数最高的返回排名0

 

例如:zadd zset1 1 v1 2 v2 3 v3 4 v4 5 v5

     zrank zset1 v2

返回: 1

2.5 删除成员

命令:zrem key member[member2..] 返回成功删除成员的个数

例如:zadd zset1 1 v1 2 v2 3 v3 4 v4 5 v5

      zrem zset1 v2 v3

返回: 2

2.6 增加成员分数

命令: zincrby key increment member

例如: zadd zset1 1 v1

    zincrby zset1 2 v1

    zrange zset1  0 -1

返回:3

     v1

2.7 返回指定排名(按分数)范围的成员

命令:(1)zrange key start end [withscores]从低到高,增加withscores属性则显示分数

     (2)zrevrange key start end [withscores] 从高到低,增加withscores属性则显示分数

例如:zadd zset1 1 v1 2 v2 3 v3 4 v4 5 v5

     zrange zset1 1 3 withscores

返回:1) "v2"

2) "2"

3) "v3"

4) "3"

5) "v4"

例如:zadd zset1 1 v1 2 v2 3 v3 4 v4 5 v5

     zrevrange zset1 1 3 withscores

返回:1) "v4"

2) "4"

3) "v3"

4) "3"

5) "v2"

6) "2"

2.8 返回指定分数范围的成员

命令:zrangebyscore key min max [withscores] [limit offset count],

选项:withscores—是否输出分数

      limitoffset count---限制起始位置和个数

     min和max支持开区间(小括号)和闭区间(中括号),+inf和-inf分别表示正负无穷大

例如: zadd zset1 10 v1 20 v2 30 v3 40 v4 50 v5

    zrangebyscore zset1 20 50 withscores limit 0 4

返回:1) "v2"

2) "20"

3) "v3"

4) "30"

5) "v4"

6) "40"

2.9 返回指定分数范围成员个数

命令:zcount key min max

例如:zadd zset1 10 v1 20 v2 30 v3 40 v4 50 v5

     zcount zset1 20 40

返回:3

 

2.10 删除指定排名内的升序元素

命令: zremrangebyrank key start end

例如:zadd zset1 10 v1 20 v2 30 v3 40 v4 50 v5

     zremrangebyrank zset1 1 3

返回:3

继续查询:zrange zset1 0 -1

返回:v1

     v5

2.11 删除指定分数范围的成员

命令: zremrangebyscore key min max

例如:zadd zset1 10 v1 20 v2 30 v3 40 v4 50 v5

     zremrangebyscore zset1 10 30

返回:3

继续查询:zrange zset1 0 -1

返回:v4

     v5

  

2.12 求多个集合的交集

命令:zinterstore destination numkeys key [key…][weights weight[weight…]] [aggregatesum|min|max]

选项:destination:交集计算结果保存到这个键中

     numkeys:需要做交集计算的键的个数

     key[key…]:需要做交集计算的键

     weights weight[weight…]:每个键的权重,在做交集计算时,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1.

     Aggregate sum|min|max:计算成员交集后,分值可以按照sum,min,max做汇总,默认值是sum。

例如:zadd zset1 10 v1 20 v2 30 v3 40 v4 50 v5 60 v6 [

zadd zset2 110 v1 120 v2 130 v3 140 v4 150 v5 160 v6

      zinterstoreinterstoreset1 2 zset1 zset2 weights 1 0.05 aggregate max

返回:  1) "v1"

 2) "10"

 3) "v2"

 4) "20"

 5) "v3"

 6) "30"

 7) "v4"

 8) "40"

 9) "v5"

10) "50"

11) "v6"

12) "60"

2.13 求多个集合的并集

命令:zunionstore destination numkeys key [key…][weights weight[weight…]] [aggregatesum|min|max]

选项:destination:交集计算结果保存到这个键中

     numkeys:需要做交集计算的键的个数

     key[key…]:需要做交集计算的键

     weights weight[weight…]:每个键的权重,在做交集计算时,每个键中的每个member会将自己分数乘以这个权重,每个键的权重默认是1.

     Aggregate sum|min|max:计算成员交集后,分值可以按照sum,min,max做汇总,默认值是sum。

例如:zadd zset1 10 v1 20 v2 30 v3 40 v4 50 v5 60 v6 [

zadd zset2 110 v1 120 v2 130 v3 140 v4 150 v5 160 v6

      zunionstoreinterstoreset1 2 zset1 zset2 weights 1 0.05 aggregate max

返回:

1) "v1"

 2)"15.5"

 3)"v2"

 4)"26"

 5)"v3"

 6)"36.5"

 7)"v4"

 8)"47"

 9)"v5"

10) "57.5"

11) "v6"

12) "68"

                

 

 

三. 有序集合命令的时间复杂度

四. 内部编码

集合类型的内部编码有两种:

(1)      ziplist(压缩列表),当集合中的元素都是整数,且元素个数小于zset-max-ziplist-entries配置(默认512个)时,Redis会采用ziplist来做为集合的内部实现,从而减少内存的使用。

(2)      skiplist(跳跃表),当有序集合类型无法满足ziplist的条件时,Redis就会使用skiplist做为有序集合的内部实现。

 

 

五. 有序集合的适用场景及方案

(1)zrevrangebyrank=排名系统

(2)zadd,zincrby=点赞

展开阅读全文

有序集合内部编码

05-25

<div>n <span style="font-size:16px;"><span><span style="font-size:20px;color:#FF0000;"><strong><span>课程亮点:</span></strong></span></span></span> n</div>n<div style="font-size:16px;">n <span style="color:#424242;"><span style="background-color:#FFFAA5;">课程培训详细的笔记以及实例代码,让学员开始掌握Redis知识点</span></span> n</div>n<p style="font-size:16px;">n <span style="font-size:14px;"><span><span style="background-color:#FFFFFF;"><span style="color:#424242;"><br /></span></span></span></span> n</p>n<div>n <div>n <span style="font-size:16px;"><span><strong><span style="background-color:#FFFFFF;">课程内容:</span></strong></span></span> n </div>n <div>n  n <ol><li>n <span style="font-size:16px;color:#E53333;"><strong>第5章:列表类型:列表各种操作命令、列表命令时间复杂度、列表应用场景、列表内部编码</strong></span>n </li>n <li>n <span style="font-size:16px;color:#E53333;"><strong>第6章:集合类型:集合各种操作命令、集合命令时间复杂度、集合应用场景、集合内部编码</strong></span>n </li>n <li>n <span style="font-size:16px;color:#E53333;"><strong>第7章:有序集合类型:有序集合各种操作命令、有序集合命令时间复杂度、有序集合应用场景、有序集合内部编码</strong></span>n </li>n </ol></div>n</div>n<div style="font-size:16px;">n <span style="color:#FF0000;"><strong><span style="font-size:18px;">课程特色:</span></strong></span> n</div>n<div>n <ol><li>n 笔记Redis数据库 :用200多条笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力n </li>n <li>n 笔记标题采用关键字标识法,帮助学员更加容易记住知识点n </li>n <li>n 笔记以超链接形式让知识点关联起来,形式知识体系n </li>n <li>n 采用先概念后实例再应用方式,知识点深入浅出n </li>n <li>n <strong>提供授课内容笔记作为课后复习以及工作备查工具</strong> n </li>n </ol></div>n<p>n <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;">部分图表(电脑PC端查看):</span></strong></strong></span></span></span> n</p>n<p>n <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/201905251335369172.png" alt="" /><img src="https://img-bss.csdn.net/201905251335429146.png" alt="" /><img src="https://img-bss.csdn.net/201905251335472334.png" alt="" /><img src="https://img-bss.csdn.net/201905251335527303.png" alt="" /><img src="https://img-bss.csdn.net/201905251335582663.png" alt="" /><img src="https://img-bss.csdn.net/201905251336033320.png" alt="" /><img src="https://img-bss.csdn.net/201905251336081754.png" alt="" /><br /></span></strong></strong></span></span></span> n</p>

没有更多推荐了,返回首页