Redis之Zset

目录

一.介绍

二.命令

三.编码方式

四.应用场景


Redis的学习专栏:http://t.csdnimg.cn/a8cvV

一.介绍

        ZSET(有序集合)是 Redis 提供的一种数据结构,它与普通集合(SET)类似,不同之处在于每个元素都关联一个双精度浮点数的分数(score)。这使得 ZSET 在普通集合的基础上增加了一个排序的特性。这次的有序并不是list按顺序插入,而是指升序和降序。默认是升序

相当于给SET集合的元素标上个优先级排序,注:score可以重复

二.命令

ZADD命令

        往有序集合当中添加元素和分数,

语法:ZADD key  [ nx | xx ]  [gt | lt ]  [ch] [incr]   score1 member1 score2 member2 ...

  • nx:表示只在成员不存在时添加。
  • xx:表示只在成员已经存在时进行更新操作。
  • lt: 要求新分数要比原来分数低。
  • gt: 要求新分数比原来分数高
  • ch:命令会返回添加或更新的成员数量。如果没有指定该选项,则返回的是添加的成员数量(不包括更新的成员)。
  • incr:元素已经存在,则将其原有的分数增加给定的分数。

zrange 

        查询结果,连带分数

语法:zrange key start end withscores

ZCARD

        获取元素个数

语法:ZCARD KEY

ZCOUNT

        获取最小范围到最大范围的值,返回个数。

语法:ZCOUNT key  [ ( ]  min   [ ( ]  max      添加上(  表示,不包括这个数值

ZRANGEBYSCORE

   用于获取有序集合中指定分数范围内的成员列表

语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]    

  • WITHSCORES:可选参数,如果指定了此参数,则返回结果包含成员及其分数。
  • LIMIT offset count:可选参数,用于限制返回结果的数量,从偏移量 offset 开始,最多返回 count 个成员。

ZREVRANGE

        逆序获取有序集合中指定分数范围内的成员列表

语法:zrevrange key 0 -1 withscores

ZPOPMAX

        删除并返回分数最高的count个元素,如果相同,则根据字典序删除

语法:ZPOPMAX key [count]

注:ZPOPMIN,同样的语法使用

BZPOPMAX

        从阻塞的有序集合中弹出分数最高的成员。当集合中没有元素时,直到元素可以弹出或者超时时间到达。

语法:BZPOPMAX key [key ...] timeout

注:BZPOPMIN同样的语法

ZRANK

        获取指定元素的排名

语法:ZRANK KEY member

注:ZREVRANK 获取元素的倒数排名

zrem

        根据member元素,删除

语法:zrem  key  member [member]

ZREMRANGEBYRANK

        根据下标范围,删除元素

语法:zremrangebyrank key start stop

ZINCRBY 

        指定元素,给分数添加指定值

语法:ZINCRBY KEY  值  member

和SET一样,也拥有交、并。但没有直接支持的差集指令

交集:ZINTERSTORE output(存放在output当中) 2(这个代表几个成员) zset1 zset2 WEIGHTS 2 3 [ AGGREGATE MAX(相同值取最大值> | sum 取和 | MIN取最小值) ]
zset1zset2 中分数值最大的成员放入 output 中,其中 zset1 的分数乘以 2,zset2 的乘以 3,如果有多个成员具有相同的分数,那么将使用指定的聚合函数来决定使用哪一个。

并集: ZUNIONSTORE DESTINATION NUMKEYS KEY [ KEY...] [WEIGHTS weight [weight ...] ] [ AGGREGATE <SUM | MIN | MAX >]

DESTINATION: 存储的位置

weights :权重,分数相乘

sum:相同member的值相加   MIN:相同的member取最小   MAX :相同的member取最大

三.编码方式

        有序集合(ZSET)的内部编码采用了一种叫做 ziplist 的压缩列表(compressed list)来存储。

  1. 压缩列表 (ziplist)

    • Redis 使用压缩列表作为内部数据结构来存储小型的有序集合。压缩列表是一种紧凑的连续内存结构,可以有效地存储较少数量的元素。
    • 压缩列表通过将多个小元素存储在一起,并采用一些压缩技术来减少内存使用。这对于存储少量元素的有序集合非常有效,可以减少内存碎片化并提高存取效率。
  2. 升级为跳表 (skiplist)

    • 当有序集合的元素数量增多,或者元素的大小超出了压缩列表的限制时,Redis 会将其升级为另一种更为复杂的数据结构,即跳表(skiplist)。
    • 跳表是一种基于有序链表的数据结构,通过多级索引来加速元素的查找,能够在 O(log N) 的时间复杂度内进行插入、删除和查找操作。

跳表优势:

  • 相对于压缩列表能够处理更大量级的数据,因为其查找效率更高,适用于大型的有序集合。
  • 跳表的结构允许有序集合的元素按照分数进行排序,并支持高效的范围查询(range queries)操作。

四.应用场景

        这种数据结构应用于各种各样的排行榜。例如:

  • 游戏排行榜,记录每一名玩家的分数
  • 热搜榜,记录每一条搜索的热度值

疑问?redis是内存存储的啊,少得可怜啊,可是玩家个数那么多,使用ZSET真的可以存储吗?

假设,游戏名按4个字节存储,分数按照8个字节存储,那么就12个字节,假设中国14亿玩家都玩游戏,那么就需要14.4GB,而ZGST是可以存储的下。

疑问?热搜榜,怎么设定呢?这个分数怎么获取呢?

答:你忘记了吗,我们可以使用WEIGHT权重,然后通过点赞量、转发量、评论量等,进行并集计算,得出最终分数。

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

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

相关文章

【带你了解软件系统架构的演变】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 1. 介绍 🍋‍🟩软件系统架构的演变是一个响应技术变革、业务需求…

Tailwind CSS常见组合用法

1、一般布局组合 <main className"flex min-h-screen flex-col items-center justify-between p-24"></main>flex将元素的显示类型设置为 flexbox。这意味着子元素将以 flex 项的方式排列。min-h-screen将元素的最小高度设置为全屏高度&#xff08;视口高…

【Powershell】超越限制:获取Azure AD登录日志

你是否正在寻找一种方法来追踪 Azure Active Directory&#xff08;Azure AD&#xff09;中用户的登录活动&#xff1f; 如果是的话&#xff0c;查看Azure AD用户登录日志最简单的方法是使用Microsoft Entra管理中心。打开 https://entra.microsoft.com/&#xff0c;然后进入 监…

CentOS 7开启SSH连接

1. 安装openssh-server 1.1 检查是否安装openssh-server服务 yum list installed | grep openssh-server如果有显示内容&#xff0c;则已安装跳过安装步骤&#xff0c;否则进行第2步 1.2 安装openssh-server yum install openssh-server2. 开启SSH 22监听端口 2.1 打开ssh…

对零拷贝技术的思考过程

名词 CPU拷贝&#xff1a;将内核缓存区的数据拷贝到用户缓存区DMA拷贝&#xff1a;将外设上的数据拷贝到内核缓存区系统调用&#xff1a;应用程序调用操作系统的接口上下文切换&#xff1a;用户态和内核态&#xff0c;应用调用操作系统的接口&#xff0c;操作系统调用CPU内核工…

每天都在用的20个Python技巧,让你从此告别平庸!

今天我将向大家分享日常工作中常用的20个Python技巧&#xff0c;小巧而优雅&#xff0c;让你的代码更加 Pythonic&#x1f44d; 目录 Tip1&#xff1a;单行代码实现变量值交换 Tip2&#xff1a;序列反转很简单 Tip3&#xff1a;字符串乘法 Tip4&#xff1a;单行代码实现条…

RFID(NFC) CLRC663非接触读取芯片GD32/STM32 SPI读取

文章目录 基本介绍硬件配置连接硬件连接详解程序代码代码解释 基本介绍 CLRC663 是高度集成的收发器芯片&#xff0c;用于 13.56 兆赫兹的非接触式通讯。CLRC663 收发器芯片支 持下列操作模式 • 读写模式支持 ISO/IEC 14443A/MIFARE • 读写模式支持 SO/IEC 14443IB • JIS X…

打破误解:走近轻度自闭症患者的真实生活

在自闭症的广阔光谱中&#xff0c;轻度自闭症是一个相对温和但又不可忽视的存在。它像是一层薄薄的雾&#xff0c;轻轻笼罩在患者的世界里&#xff0c;既不影响他们基本的生存能力&#xff0c;又在一定程度上影响着他们的社交互动、情感表达及兴趣范围。 轻度自闭症患者往往能…

【Android】Android模拟器抓包配置

从Android7.0之后开始&#xff0c;用户自行安装的证书在用户目录下&#xff0c;无法进行证书信任&#xff0c;导致Charles无法进行https抓包 方案&#xff1a; 1. 获取手机root权限 有些模拟器可以直接开启root权限&#xff1b; 有些Android手机可以直接开启root权限。 2. …

【ai】学习笔记:电影推荐1:协同过滤 TF-DF 余弦相似性

2020年之前都是用协同过滤2020年以后用深度学习、人工智能视频收费的,不完整,里面是电影推荐 这里有个视频讲解2016年大神分析了电影推荐 :MovieRecommendation github地址 看起来是基于用户的相似性和物品的相似性,向用户推荐物品: 大神的介绍: 大神的介绍: 基于Pytho…

Python3 基础语法快速入门

目录&#xff1a; 一、概述二、运行1、终端启动 Python3 交互式解释器直接执行&#xff1a;2、.py 文件运行&#xff1a;3、可执行文件运行&#xff1a; 三、基础语法1、Python 中文编码&#xff1a;2、注释&#xff1a;3、print 输出&#xff1a;4、变量赋值&#xff1a;5、行…

tcp协议下的socket函数

目录 1.socket函数 2.地址转换函数 1.字符串转in_addr的函数:​编辑 2.in_addr转字符串的函数&#xff1a;​编辑 1.关于inet_ntoa函数 3.listen函数 4.简单的Server模型 1.初步模型 1.sock函数和accept函数返回值的sockfd的区别 2.运行结果和127.0.0.1的意义 2.单进…

【游戏/社交】BFS算法评价用户核心程度or人群扩量(基于SparkGraphX)

【游戏/社交】BFS算法评价用户核心程度or人群扩量&#xff08;基于SparkGraphX&#xff09; 在游戏和社交网络领域&#xff0c;评估用户的核心程度或进行人群扩量是提升用户粘性和拓展社交圈的关键。广度优先搜索&#xff08;BFS&#xff09;算法以其在图结构中评估节点重要性…

[C/C++入门][变量和运算]9、数据类型以及占用存储空间大小

我们都知道&#xff0c;C中包含了多种数据类型 数据类型占用字节数中文名称注释char1字符型存储单个字符&#xff0c;通常为8位。signed char1有符号字符型字符型的有符号版本&#xff0c;可用于表示-128至127之间的整数。unsigned char1无符号字符型字符型的无符号版本&#…

SpringAI简单使用(本地模型+自定义知识库)

Ollama 简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它允许用户在本地机器上构建和运行语言模型&#xff0c;提供了一个简单易用的API来创建、运行和管理模型&#xff0c;同时还提供了丰富的预构建模型库&#xff0c;这些模型可以轻松地应用在多种应用场景中。O…

arm 内联汇编基础

一、 Arm架构寄存器体系熟悉 基于arm neon 实现的代码有 intrinsic 和inline assembly 两种实现。 1.1 通用寄存器 arm v7 有 16 个 32-bit 通用寄存器&#xff0c;用 r0-r15 表示。 arm v8 有 31 个 64-bit 通用寄存器&#xff0c;用 x0-x30 表示&#xff0c;和 v7 不一样…

如何在 PostgreSQL 中处理海量数据的存储和检索?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 如何在 PostgreSQL 中处理海量数据的存储和检索&#xff1f;一、优化表结构设计二、分区技术三、数据压…

ceph log内容解析

log内容构造 如osd的一条log 分别表示 时间戳 线程id 日志等级 子模块 内容实体 剖析源码实现 每条log都是由一个Entry构成 定义在src/log/entry.h中 Entry(short pr, short sub) :m_stamp(clock().now()), // 打印日志时的时间戳m_thread(pthread_self()), // 打印日志的线…

【精品资料】智慧物流园区整体架构方案(46页PPT)

引言&#xff1a;智慧物流园区整体架构方案是一个集现代信息技术、物联网、大数据、云计算及人工智能等前沿科技于一体的综合性物流园区建设蓝图。该方案旨在通过高度集成和智能化的系统&#xff0c;优化物流流程&#xff0c;提升运营效率&#xff0c;降低运营成本&#xff0c;…

智慧新零售移动端收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…