热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于redis:redis-八redis之Zset

redis系列文章:[链接]本篇起源:[链接]公众号:雨中散步撒哈拉备注:欢送关注公众号,一起学习,共同进步!一、基本概念Redis有序汇合和汇合一样也是string类型元素的汇合,且不容许反复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为汇合中的成员进行从小到大的排序。有序汇合的成

redis系列文章:
https://liudongdong.top/categ…
本篇起源:
https://liudongdong.top/archi…
公众号:雨中散步撒哈拉
备注:欢送关注公众号,一起学习,共同进步!

一、基本概念

Redis 有序汇合和汇合一样也是 string 类型元素的汇合,且不容许反复的成员。

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为汇合中的成员进行从小到大的排序。

有序汇合的成员是惟一的,但分数(score)却能够反复。

汇合是通过哈希表实现的,所以增加,删除,查找的复杂度都是 O(1)。 汇合中最大的成员数为 232 – 1 (4294967295, 每个汇合可存储40多亿个成员)。

实例:

127.0.0.1:6379> zadd zset 1 one 2 two 3 three 4 four 5 five
(integer) 5
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379>
二、命令分类

依据集体了解和便于学习,进行了简略分类!
分为以下几类:

  1. 新增成员
  2. 删除成员
  3. 查问成员

1. 新增成员

  1. zadd:新增成员

2. 删除成员

  1. zrem:依据指定key进行删除
  2. zremrangebylex:依据指定汇合区间进行删除
  3. zremrangebyrank:依据指定排名区间进行删除
  4. zremrangebyscore:依据分数区间进行删除

3. 查问成员

  1. zcard:查问汇合成员数量
  2. zcount:分数区间成员数量
  3. zlexcount:成员区间成员数量
  4. zscore:指定key和值,获取分数
  5. zrange:获取成员信息
  6. zrank:指定key和值,获取下标
  7. zrangebylex:指定汇合区间,获取列表
  8. zrangebyscore:指定分数区间,获取列表
  9. zrevrange:倒序展现列表
  10. zrevrangebyscore:依据分数区间,倒序展现列表
  11. zreverank:倒序获取成员下标
三、命令实际

1. 新增成员

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> zadd zset 1 one 2 two 3 three 4 four 5 five
(integer) 5
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379>

2. 删除成员

# 移除zset下的one
127.0.0.1:6379> zrem zset one
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "two"
2) "three"
3) "four"
4) "five"
# 移除分数排名为1和2成员
127.0.0.1:6379> zremrangebyrank zset 1 2
(integer) 2
127.0.0.1:6379> zrange zset 0 -1
1) "two"
2) "five"
# 移除分数区间为[1,2]
127.0.0.1:6379> zrange zset 0 -1
1) "two"
2) "five"
127.0.0.1:6379> zremrangebyscore zset 1 2
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
1) "five"
127.0.0.1:6379> 

3. 查问成员

127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
# 查问汇合数量
127.0.0.1:6379> zcard zset
(integer) 5
# 查问问题在[0,5]区间内的成员
127.0.0.1:6379> zcount zset 0 5
(integer) 5
# 依据汇合区间进行统计
127.0.0.1:6379> zlexcount zset - +
(integer) 5
# 依据key和value值,获取分数
127.0.0.1:6379> zscore zset four
"4"
# 获取所有汇合信息
127.0.0.1:6379> zrange zset 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379> zrange zset 0 3
1) "one"
2) "two"
3) "three"
4) "four"
# 依据key和值获取下标
127.0.0.1:6379> zrank zset three
(integer) 2
# 依据汇合区间进行获取汇合成员
127.0.0.1:6379> zrangebylex zset - +
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
# 依据分数区间进行获取汇合列表
127.0.0.1:6379> zrangebyscore zset 0 4
1) "one"
2) "two"
3) "three"
4) "four"
# 倒序排列汇合
127.0.0.1:6379> zrevrange zset 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
# 倒序排列依据分数区间
127.0.0.1:6379> zrevrangebyscore zset 5 2
1) "five"
2) "four"
3) "three"
4) "two"
# 倒序排列,依据key和value,获取下标
127.0.0.1:6379> zrevrank zset three
(integer) 2
127.0.0.1:6379>
附录

下表列出了 redis 有序汇合的根本命令:

序号 命令及形容
1 ZADD key score1 member1 [score2 member2] 向有序汇合增加一个或多个成员,或者更新已存在成员的分数
2 ZCARD key 获取有序汇合的成员数
3 ZCOUNT key min max 计算在有序汇合中指定区间分数的成员数
4 ZINCRBY key increment member 有序汇合中对指定成员的分数加上增量 increment
5 ZINTERSTORE destination numkeys key [key …] 计算给定的一个或多个有序集的交加并将后果集存储在新的有序汇合 destination 中
6 ZLEXCOUNT key min max 在有序汇合中计算指定字典区间内成员数量
7 ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序汇合指定区间内的成员
8 ZRANGEBYLEX key min max [LIMIT offset count] 通过字典区间返回有序汇合的成员
9 [ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]](https://www.runoob.com/redis/…) 通过分数返回有序汇合指定区间内的成员
10 ZRANK key member 返回有序汇合中指定成员的索引
11 ZREM key member [member …] 移除有序汇合中的一个或多个成员
12 ZREMRANGEBYLEX key min max 移除有序汇合中给定的字典区间的所有成员
13 ZREMRANGEBYRANK key start stop 移除有序汇合中给定的排名区间的所有成员
14 ZREMRANGEBYSCORE key min max 移除有序汇合中给定的分数区间的所有成员
15 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低
16 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
17 ZREVRANK key member 返回有序汇合中指定成员的排名,有序集成员按分数值递加(从大到小)排序
18 ZSCORE key member 返回有序集中,成员的分数值
19 ZUNIONSTORE destination numkeys key [key …] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
20 [ZSCAN key cursor [MATCH pattern] [COUNT count]](https://www.runoob.com/redis/…) 迭代有序汇合中的元素(包含元素成员和元素分值)

推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 006_Redis的List数据类型
    1.List类型是一个链表结构的集合,主要功能有push,pop,获取元素等。List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List的设 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
author-avatar
伊劾kj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有