Redis数据结构之ZSet

目录

    • 1.概述
    • 2.常见操作
      • 2.1 ZADD
      • 2.2 ZRANGE
      • 2.3 ZREVRANGE
      • 2.4 ZRANGEBYSCORE
      • 2.5 ZSCORE
      • 2.6 ZCARD
      • 2.6 ZREM
      • 2.7 ZINCRBY
      • 2.8 ZCOUNT
      • 2.9 ZMPOP
      • 2.10 ZRANK
      • 2.11 ZREVRANK
    • 3.总结

1.概述

  • ZSet和Set一样也是String类型元素的集合,且不允许重复的成员,不同的是ZSet每个元素都会关联一个double类型的分数,Redis正是通过分数来为集合中的成员进行从小到大的排序。
  • ZSet的成员是唯一的,但分数(score)却可以重复。
  • ZSet集合是通过哈希表实现的,所以添加,删除,査找的复杂度都是O(1)。
  • ZSet集合中最大的成员数为2³²-1。

在这里插入图片描述

2.常见操作

2.1 ZADD

向有序集合中添加元素和元素的分数

ZADD key score member [score member ...]

例:

127.0.0.1:6379> zadd zset1 10 v1 20 v2 30 v3 40 v4
(integer) 4

2.2 ZRANGE

遍历,0到-1代表遍历所有,WITHSCORES结果带着分数

ZRANGE key start stop [WITHSCORES]

例:遍历

127.0.0.1:6379> zrange zset1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"

例:遍历,结果带着分数

127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"

2.3 ZREVRANGE

根据分数反转

127.0.0.1:6379> ZREVRANGE zset1 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> ZREVRANGE zset1 0 -1 withscores
1) "v4"
2) "40"
3) "v3"
4) "30"
5) "v2"
6) "20"
7) "v1"
8) "10"

2.4 ZRANGEBYSCORE

获取指定分数范围的元素

ZRANGEBYSCORE key [(]min max [WITHSCORES] [LIMIT offset count]

(:不包含
min:分数from
max:分数to
offset:开始下标
count:数量

例:获取分数区间[20, 30]的元素

127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
127.0.0.1:6379> ZRANGEBYSCORE zset1 20 30
1) "v2"
2) "v3"
127.0.0.1:6379> ZRANGEBYSCORE zset1 20 30 withscores
1) "v2"
2) "20"
3) "v3"
4) "30"

例:获取分数区间(20, 40]的元素

127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
127.0.0.1:6379> ZRANGEBYSCORE zset1 (20 40
1) "v3"
2) "v4"

例:limit限制返回的数量

127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v3"
6) "30"
7) "v4"
8) "40"
127.0.0.1:6379> ZRANGEBYSCORE zset1 10 40 limit 1 2
1) "v2"
2) "v3"

2.5 ZSCORE

获取元素分数

127.0.0.1:6379> zscore zset1 v3
"30"

2.6 ZCARD

元素个数

127.0.0.1:6379> zcard zset1 
(integer) 4

2.6 ZREM

删除某个元素

127.0.0.1:6379> zrem zset1 v3 
(integer) 1

2.7 ZINCRBY

为元素member增加分数increment

ZINCRBY key increment member

例:对元素v1加3分

127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "v1"
2) "10"
3) "v2"
4) "20"
5) "v4"
6) "40"
127.0.0.1:6379> zincrby zset1 3 v1
"13"
127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "v1"
2) "13"
3) "v2"
4) "20"
5) "v4"
6) "40"

2.8 ZCOUNT

获得指定分数范围内的元素个数

min: 最小分数
max: 最大分数

ZCOUNT key min max

例:

127.0.0.1:6379> zrange zset1 0 -1 WITHSCORES1) "v1"2) "10"3) "v2"4) "20"5) "v3"6) "30"7) "v4"8) "40"9) "v5"
10) "50"
11) "v6"
12) "60"
13) "v7"
14) "70"
127.0.0.1:6379> zcount zset1  30 50
(integer) 3

2.9 ZMPOP

7.0新特性,在指定的numkeys个集合中,弹出分数最大(MAX)或最小(MIN)的count个元素(分数和值成对),可以实现在一个或多个集合中,取出最小或最大的几个元素

ZMPOP numkeys key [key ...] <MIN | MAX> [COUNT count]

例:在1个zset1集合中,弹出最小的1个元素

127.0.0.1:6379> zrange zset1 0 -1 WITHSCORES1) "v1"2) "10"3) "v2"4) "20"5) "v3"6) "30"7) "v4"8) "40"9) "v5"
10) "50"
11) "v6"
12) "60"
13) "v7"
14) "70"
127.0.0.1:6379> ZMPOP 1 zset1 min count 1
1) "zset1"
2) 1) 1) "v1"2) "10"
127.0.0.1:6379> 

2.10 ZRANK

正序下标,集合的某个元素,正序处于集合第几个

127.0.0.1:6379> zrange zset1 0 -1
1) "v2"
2) "v3"
3) "v4"
4) "v5"
5) "v6"
6) "v7"
127.0.0.1:6379> zrank zset1 v2
(integer) 0
127.0.0.1:6379> zrank zset1 v3
(integer) 1
127.0.0.1:6379> zrank zset1 v4
(integer) 2
127.0.0.1:6379> zrank zset1 v5
(integer) 3

2.11 ZREVRANK

倒序下标,集合的某个元素,倒序处于集合第几个

127.0.0.1:6379> zrange zset1 0 -1
1) "v2"
2) "v3"
3) "v4"
4) "v5"
5) "v6"
6) "v7"
127.0.0.1:6379> zrevrank zset1 v2
(integer) 5
127.0.0.1:6379> zrevrank zset1 v3
(integer) 4
127.0.0.1:6379> zrevrank zset1 v4
(integer) 3
127.0.0.1:6379> zrevrank zset1 v5
(integer) 2

3.总结

排序集合大量应用于项目,例如实时展示热销商品统计,打赏点赞数量排行榜统计。将销量和点赞打赏数作为分数绑定在值上面即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是DHCP服务,在生活中的应用是什么?

提起DHCP&#xff0c;不接触互联网的可能会很陌生&#xff0c;其实并没有这么高深&#xff0c;简明扼要的说就是可以自动为连接的设备分配IP地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;dns等网络参数。使连接步骤简化&#xff0c;从而提高效率。 主要功能&#xff…

2025 AI智能数字农业研讨会在苏州启幕,科技助农与数据兴业成焦点

4月2日&#xff0c;以"科技助农数据兴业”为主题的2025AI智能数字农业研讨会在苏州国际博览中心盛大启幕。本次盛会吸引了来自全国各地相关部门领导、知名专家学者、行业协会组织&#xff0c;以及县级市农业企业代表、县级市农产品销售商等万名嘉宾齐聚姑苏城&#xff0c;…

论文导读 | SOSP23 | Gemini:大模型 内存CheckPoint 快速故障恢复

本期分享的是一篇SOSP 2023论文&#xff1a; Gemini: Fast Failure Recovery in Distributed Training with In-Memory Checkpoints Zhuang Wang (Rice University), Zhen Jia (Amazon Web Services, Inc.), Shuai Zheng (Amazon Web Services), Zhen Zhang (Amazon Web Servic…

wordpress可视化数据采集Scrapes插件,WP博客网站自动采集发布

源码介绍 wordpress自动采集Scrapes插件&#xff0c;支持ripro&#xff0c;modown&#xff0c;子比&#xff0c;7b2等多种WordPress主题 支持PHP7.4&#xff0c;PHP8.0及以上不支持 上传插件到wp-content/plugins目录&#xff0c;然后解压 不需要写采集规则&#xff0c;傻瓜式…

JavaScript Math(算数)指南

JavaScript Math&#xff08;算数&#xff09;指南 引言 JavaScript的Math对象是一个内置对象&#xff0c;提供了进行数学运算的方法和值。它对于执行基本的数学计算、生成随机数以及执行更复杂的数学操作非常有用。本文将详细介绍JavaScript中的Math对象&#xff0c;涵盖其常…

Deep Reinforcement Learning for Robotics翻译解读

a. 机器人能力 1 单机器人能力&#xff08;Single-robot competencies&#xff09; 运动能力&#xff08;Mobility&#xff09; 行走&#xff08;Locomotion&#xff09;导航&#xff08;Navigation&#xff09; 操作能力&#xff08;Manipulation&#xff09; 静态操作&…

最新扣子(Coze)案例教程:最新抖音视频文案提取方法替代方案,音频视频提取文案插件制作,手把手教学,完全免费教程

&#x1f468;‍&#x1f4bb; 星球群同学反馈&#xff0c;扣子平台的视频提取插件已下架&#xff0c;很多智能体及工作流不能使用&#xff0c;斜杠君这里研究了一个替代方案分享给大家。 方案原理&#xff1a;无论是任何视频或音频转文案&#xff0c;我们提取的方式首先都是要…

yum list查询时部分包查找不到流程分析

以下是针对 yum list available -c xxx.repo&#xff08;对应 DNF 的命令行操作&#xff09;的详细流程解读&#xff0c;包括参数解析、配置初始化、元数据加载、数据库查询&#xff0c;以及读取不到特定包的场景分析。 1. 命令行参数解析与入口函数 代码入口: dnf.cli.main.m…

k8s 1.23升级1.24

0、简介 这里只用3台服务器来做一个简单的集群&#xff0c;当前版本是1.23.17目标升级到1.24.17 地址主机名192.168.160.40kuber-master-1192.168.160.41kuber-master-2192.168.160.42kuber-node-1 我这里设置的master2可调度pod&#xff0c;将master2的污点去掉 kubectl de…

# 实时人脸识别系统:基于 OpenCV 和 Python 的实现

实时人脸识别系统&#xff1a;基于 OpenCV 和 Python 的实现 在当今数字化时代&#xff0c;人脸识别技术已经广泛应用于各种场景&#xff0c;从手机解锁到安防监控&#xff0c;再到智能门禁系统。今天&#xff0c;我将通过一个完整的代码示例&#xff0c;详细讲解如何使用 Pyt…

Linux:(五种IO模型)

目录 一、对IO的重新认识 二、IO的五种模型 1.阻塞IO 2.非阻塞IO 3.信号驱动IO 4.IO多路转接 5.异步IO 6.一些概念的解释 三、非阻塞IO的代码实现 1.fcntl 2.实现主程序 一、对IO的重新认识 如果有人问你IO是什么&#xff0c;你该怎么回答呢&#xff1f; 你可能会说…

将电脑控制手机编写为MCP server

文章目录 电脑控制手机后,截屏代码复习MCP server构建修改MCP的config文件测试效果困惑电脑控制手机后,截屏代码复习 def capture_window(hwnd: int, filename: str = None) -> dict:""&

[ctfshow web入门] web6

前置知识 入口点(目录)爆破 还记得之前说过网站的入口的吗&#xff0c;我们输入url/xxx&#xff0c;其中如果url/xxx存在&#xff0c;那么访问成功&#xff0c;证明存在这样一个入口点&#xff1b;如果访问失败则证明不存在此入口点。所以我们可以通过遍历url/xxx&#xff0c;…

【计算机网络】Linux配置SNAT策略

什么是NAT&#xff1f; NAT 全称是 Network Address Translation&#xff08;网络地址转换&#xff09;&#xff0c;是一个用来在多个设备共享一个公网 IP上网的技术。 NAT 的核心作用&#xff1a;将一个网络中的私有 IP 地址&#xff0c;转换为公网 IP 地址&#xff0c;从而…

Mathematics | Branch

注&#xff1a;本文为“遇见数学”翻译的 “数学分支概览” 两篇文章合辑。 数学世界的版图&#xff1a;主要分支概览&#xff08;上&#xff09; 原创 遇见数学 2025 年 04 月 03 日 12:02 河南 数学的分支&#xff08;Areas of Mathematics&#xff09; 在文艺复兴之前&am…

Ubuntu(CentOS、Rockylinux等)快速进入深度学习pytorch环境

这里写自定义目录标题 安装进入系统&#xff08;如Ubuntu22.04&#xff09;安装anacondapip、conda换源pip换源conda换源 安装nvidia安装pytorch环境针对于wsl的优化 安装进入系统&#xff08;如Ubuntu22.04&#xff09; docker 、 wsl 、 双系统 、服务器系统 推荐 Ubuntu 20…

什么是混杂模式?为什么 macvlan 依赖它

在 macvlan 场景中&#xff0c;物理网络是否支持混杂模式&#xff08;Promiscuous Mode&#xff09; 直接影响 macvlan 虚拟接口的通信能力。以下是详细解释和操作指南&#xff1a; 一、什么是混杂模式&#xff1f;为什么 macvlan 依赖它&#xff1f; 混杂模式的定义 当物理网络…

物理数据流图

物理数据流图&#xff08;Physical Data Flow Diagram, PDFD&#xff09;详解 物理数据流图是结构化系统分析中的一种建模工具&#xff0c;用于描述系统在物理环境下的具体实现方式&#xff0c;包括硬件、软件、人工操作和物理文件等实际组成部分。它与**逻辑数据流图&#xf…

Linux开发工具——vim

&#x1f4dd;前言&#xff1a; 上篇文章我们讲了Linux开发工具——apt&#xff0c;这篇文章我们来讲讲Linux开发工具——vim &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&a…

在 Langflow 中构建灵活的自定义组件:从基础到高级实践

本文深入探讨了如何在 Langflow 平台中创建功能丰富的自定义组件。通过详细的目录结构解析、分步实现指南和多个实战案例&#xff0c;帮助开发者掌握利用 Python 生态扩展低代码平台的方法&#xff0c;打造高效的数据处理流程。 理解组件架构设计 自定义组件是在 Langflow 中创…