zset 可能是 Redis 提供的最为特色的数据结构,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权重。它的内部实现用的是一种叫做「跳跃列表」的数据结构。

zset 中最后一个 value 被移除后,数据结构自动删除,内存被回收。

zset 可以用来存粉丝列表,value 值是粉丝的用户 IDscore 是关注时间。我们可以对粉丝列表按关注时间进行排序。

zset 还可以用来存储学生的成绩,value 值是学生的 IDscore 是他的考试成绩。我们可以对成绩按分数进行排序就可以得到他的名次。

1. sorted set 类型相关命令

命令 说明
zadd key score member 添加元素到集合,元素在集集合中存在则更新应对的score
zrem key member 删除指定元素
zcount key min max 返回分数范围内的成员变量
zincrby key incr member 按照incr幅度增加对应member的score值,返回score值
zrank key member 返回指定元素在集合中的排名(下标),集合中元素是按score从小到大排序的
zrevrank key member 集合中元素是按score从大到小排序的
zrange key start end 从集合中选择指定区间的元素,返回的是有序集合
zrevrange key start end 同上,返回结果是按score逆序的
zcard key 返回集合中元素的个数
zscore key member 返回给定元素对应的score
zremrangebyrank key min max 删除集合中排名在给定区间的元素
zinterstore distination numkeys 相交多个结果集,导致排序的设置存储在一个新的结果集
zunionstore destination numberkeys 添加多个排序集合导致排序的设置存储在一个新的结果集,可以实现取得最大值(max),取得最小值(min)

2. 使用示例

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> zadd jack 90 english
(integer) 1
127.0.0.1:6379> keys *
1) "jack"
127.0.0.1:6379> zadd tom 80 english
(integer) 1
127.0.0.1:6379> keys *
1) "jack"
2) "tom"
127.0.0.1:6379> zrem tom english     # 删除指定元素
(integer) 1
127.0.0.1:6379> keys *
1) "jack"
127.0.0.1:6379> zadd tom 80 english
(integer) 1
127.0.0.1:6379> zadd tom 95 math
(integer) 1
127.0.0.1:6379> zadd tom 91 chinese
(integer) 1
127.0.0.1:6379> keys *
1) "jack"
2) "tom"
127.0.0.1:6379> zcount tom 90 100        # 返回分数范围内的成员变量
(integer) 2
127.0.0.1:6379> zincrby tom 3 chinese
"94"
127.0.0.1:6379> zrank tom chinese
(integer) 1
127.0.0.1:6379> zrank tom english
(integer) 0
127.0.0.1:6379> zrank tom math
(integer) 2
127.0.0.1:6379> zrevrank tom math
(integer) 0
127.0.0.1:6379> zrange tom 0 2
1) "english"
2) "chinese"
3) "math"
127.0.0.1:6379> zrevrange tom 0 2
1) "math"
2) "chinese"
3) "english"
127.0.0.1:6379> zcard tom
(integer) 3
127.0.0.1:6379> zscore tom math
"95"
127.0.0.1:6379> 

从集合中选择指定区间的元素,返回的是有序集合,如果要加上所携带的分数时,需要使用带有 withscores 字段的语句。

127.0.0.1:6379> zrange tom 0 -1 withscores
1) "english"
2) "80"
3) "chinese"
4) "94"
5) "math"
6) "95"

3. 容器型数据结构的通用规则

list/set/hash/zset 这四种数据结构是容器型数据结构,它们共享下面两条通用规则:

  • create if not exists

如果容器不存在,那就创建一个,再进行操作。比如 rpush 操作刚开始是没有列表的,Redis 就会自动创建一个,然后再 rpush 进去新元素。

  • drop if no elements

如果容器里元素没有了,那么立即删除元素,释放内存。这意味着 lpop 操作到最后一个元素,列表就消失了。

4. 过期时间

Redis 所有的数据结构都可以设置过期时间,时间到了,Redis 会自动删除相应的对象。需要注意的是过期是以对象为单位,比如一个 hash 结构的过期是整个 hash 对象的过期,而不是其中的某个子 key

还有一个需要特别注意的地方是如果一个字符串已经设置了过期时间,然后你调用了 set 方法修改了它,它的过期时间会消失。

127.0.0.1:6379> set str "hello world"
OK
127.0.0.1:6379> expire str 300
(integer) 1
127.0.0.1:6379> ttl str
(integer) 295
127.0.0.1:6379> ttl str
(integer) 294
127.0.0.1:6379> set str "hello"
OK
127.0.0.1:6379> ttl str
(integer) -1
127.0.0.1:6379>

Redis 笔记(07)— sorted set 类型(添加、删除有序集合元素、获取分数范围内成员、按score排序、返回集合元素个数)相关推荐

  1. java jdbc 删除_java使用jdbc实现各种类型添加删除修改数据

    项目描述 上次为大家分享了使用jdbc实现各种类型查询数据,这次为大家分享使用jdbc实现各种类型添加.删除.修改数据 运行环境 jdk8+tomcat7+mysql 项目技术(必填) jdbc+da ...

  2. NGU-学习笔记(1)-动态添加删除图集

    现在 正在做unity的方向 不得不说我选的是UI方向 Unity中很有名的就是NGUI插件了.今天做了个ngui的简单背包系统.非常简陋..初学着 自己mark下 (1)预览 主要就是个 simpl ...

  3. Redis笔记-基础篇(黑马视频教程)

    写在开头 这是我在观看黑马Redis视频教程中根据PPT和上课内容,个人写的笔记,中间有部分来源于百度,如有侵权,联系我删除. 文章目录 写在开头 NoSQL数据库简介 技术发展 NoSQL数据库 R ...

  4. Redis笔记(六):Java中使用Redis

    Java程序使用Redis 添加依赖包 Maven依赖方式 <dependency><groupId>redis.clients</groupId><arti ...

  5. Redis的list,set,zset类型应用及排行榜的实现

    Redis数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等 List类型 简介 ​ Lis ...

  6. Redis和nosql简介,api调用;Redis数据功能(String类型的数据处理);List数据结构(及Java调用处理);Hash数据结构;Set数据结构功能;sortedSet(有序集合)数

    1.Redis和nosql简介,api调用 14.1/ nosql介绍 NoSQL:一类新出现的数据库(not only sql),它的特点: 1.  不支持SQL语法 2.  存储结构跟传统关系型数 ...

  7. jq遍历循环,给每个元素添加点击事件,并返回当前元素的索引值(闭包问题)

    jq循环绑定点击事件造成闭包问题 需求:给每个带有tab类名的元素点击点击事件,点击时可以添加active类名,(用于样式切换),而且还需要返回当前元素对应的索引值: 方法一(出现闭包) 先引入jq ...

  8. ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象...

    http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value   (存一个对象的时候key存) 将哈希 ...

  9. redis之sorted sets类型及操作

    sorted sets类型及操作 sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序 ...

最新文章

  1. dell存储Linux配置,Dell MD3200远程存储的特殊配置
  2. 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)
  3. draw.io项目本地部署
  4. Django 中间件
  5. .net中怎样实现json转化时仅仅处理部分属性二?
  6. a频繁连接不上redis_连接不到redis Caused by:..._慕课问答
  7. 济南昊锐科技谈程序员与用户UI
  8. iphone 通过获取IMSI判断运营商
  9. Dell Inspiron 6400上安装Fedora 5后使声卡义务正常的方法
  10. ANDROID开发java.lang.NoClassDefFoundError: com.baidu.location.LocationClient的解决办法
  11. 香橙派用什么系统最好_oa办公系统是什么系统?国内oa办公自动化软件哪家最好?...
  12. CSS3文字渐变效果
  13. 用Response.Filter生成静态页
  14. 算法不会,尚能饭否之集合(Set)
  15. 数字化赋能全零售 国美按下战略加速键
  16. oracle 19c jdbc之Reactive Streams Ingestion (RSI) Library
  17. 2023年3月份隐私计算市场洞察
  18. 莫纳什大学招收AI/CV/ML/计算生物信息学和生物医学方向全奖博士研究生
  19. 【报告分享】小红书·新消费浪潮下的决策价值之地-小红书(附下载)
  20. sklearn聚类算法实现

热门文章

  1. 2022-2028年中国氨基酸表面活性剂行业研究及发展前瞻报告
  2. 2022-2028年中国客厅经济深度调研及投资前景预测报告
  3. 2022-2028年中国能源期货市场深度调研及投资前景预测报告
  4. Go 知识点(19)— Go 语言中的野指针
  5. Go 语言同一个包内函数调用、包名和实际路径最后一个目录不一致问题
  6. Python 典型错误及关键知识点
  7. 百例1-10(一到三章)总结
  8. LeetCode简单题之判断矩阵经轮转后是否一致
  9. C语言与OpenCL的编程示例比较
  10. CVD和ALD薄膜沉积技术应用领域