Redis之Zset

news2024/12/23 21:05:15

目录

一.介绍

二.命令

三.编码方式

四.应用场景


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.coloradmin.cn/o/1937721.html

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

相关文章

【Node】node的fs模块介绍及使用(一)

文章目录 简言File systemPromise example 承诺示例Callback example 回调示例Synchronous example 同步示例Promises API 承诺APIClass: FileHandleEvent: close 关闭文件filehandle.appendFile(data[, options]) 添加数据filehandle.chmod(mode) 修改权限filehandle.chown(ui…

安全防御---防火墙双击热备与带宽管理

目录 一、实验拓扑 二、实验需求 三、实验的大致思路 四、实验过程 4、基础配置 4.1 FW4的接口信息 4.2 新建办公&#xff0c;生产&#xff0c;游客&#xff0c;电信&#xff0c;移动安全区域 4.3 接口的网络配置 生产区:10.0.1.2/24 办公区:10.0.2.2/24 4.4 FW4的…

word的进阶

Word的基本操作 这里主要用到的软件是WPS软件。 一、创建一个文档 第一种&#xff1a;快捷键&#xff1a;ctrln第二种&#xff1a;通过界面鼠标点击 二、设置文档背景 更换过的背景如下&#xff1a; 三、章节、目录导航的设置 四、插入目录页 五、对历史文档进行管理 六、…

Unity UGUI 之EventSystem

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.EventSystem是什么&#xff1f; 有需要请查看手册&#xff1a;Unity - 手册&#xff1…

业务架构、数据架构、应用架构和技术架构分析

一文看懂&#xff1a;什么是业务架构、数据架构、应用架构和技术架构 TOGAF&#xff08;开放集团架构框架&#xff09;是企业广泛应用的架构设计和管理利器。其核心在于四大架构领域&#xff1a;业务、数据、应用和技术&#xff0c;助力组织高效运作。TOGAF&#xff0c;让架构设…

python计算PMF、PDF、CDF、PPF、KDE介绍

目录 1. 总括1.1 绘图示例1.2 概念介绍1. PMF (Probability Mass Function)2. PDF (Probability Density Function)3. CDF (Cumulative Distribution Function)4. PPF (Percent Point Function)5. KDE (Kernel Density Estimation)1. 总括 1.1 绘图示例 上图展示了PMF、PDF、C…

关于css中flex布局垂直居中失效问题的原因

项目中遇到用flex进行页面布局后&#xff0c;使用上下居中设置&#xff1a;align-item: center; 目标效果如下&#xff1a; 但是失效&#xff0c;不起作用&#xff0c;如下图所示&#xff1a; 各种排查过后发现设置了子模块 align-self 属性&#xff0c;这会覆盖容器上的 al…

科研绘图系列:R语言微生物堆积图(stacked barplot)

介绍 堆叠条形图是一种数据可视化图表,它通过将每个条形分割成多个部分来展示不同类别的数值。每个条形代表一个总体数据,而条形内的每个部分则代表该总体数据中不同子类别的数值。这种图表特别适合展示整体与部分的关系,以及各部分在整体中的比例。 特点: 多部分条形:每…

laravel为Model设置全局作用域

如果一个项目中存在这么一个sql条件在任何情况下或大多数情况都会被使用&#xff0c;同时很容易被开发者遗忘&#xff0c;那么就非常适用于今天要提到的这个功能&#xff0c;Eloquent\Model的全局作用域。 首先看一个示例&#xff0c;有个数据表&#xff0c;结构如下&#xff1…

【HarmonyOS】HarmonyOS NEXT学习日记:四、布局与容器组件

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;四、布局与容器组件 学习了基础组件之后&#xff0c;想要利用基础组件组装成一个页面&#xff0c;自然就要开始学习布局相关的知识。我理解的ArkUI的布局分为两个部分 一、组件自身的通用属性&#xff0c;诸如weight、height、…

Direct3D入门指南:创建对象、绘制几何体

DirectX是一个复杂但功能强大的API集&#xff0c;掌握了DirectX&#xff0c;特别是Direct3D&#xff0c;就意味着能够开发出高性能的图形应用和游戏。下面为大家讲解Direct3D的基础入门知识&#xff0c;以便大家能够快速上手。 创建设备 在Direct3D中&#xff0c;所有图形渲染…

LeetCode刷题记录(第二天)1. 两数之和

题目&#xff1a;1. 两数之和 标签&#xff1a;数组 哈希表 题目信息&#xff1a; 思路一&#xff1a;暴力做法 直接两重for循环遍历&#xff0c;判断两数和为target的时候返回下标结果 代码实现&#xff1a; class Solution { public:vector<int> twoSum(vector&…

深度剖析机构号矩阵系统:如何根据业务需求做出明智选择

在数字化营销的浪潮中&#xff0c;短视频平台如抖音、快手等已成为品牌传播和用户互动的重要渠道。为了更高效地管理这些平台的账号&#xff0c;机构号矩阵系统应运而生。本文将深度剖析机构号矩阵系统&#xff0c;并探讨如何根据业务需求做出明智的选择。 机构号矩阵系统概述…

【Linux】socket 套接字 / 序列化与反序列化

目录 一. TCP 网络程序简易计算器1. 核心功能2. 程序结构3. 服务器初始化4. 服务器启动5. 业务处理6. 客户端初始化7. 客户端启动 二. 序列化与反序列化1. 协议2. 序列化与反序列化 一. TCP 网络程序 简易计算器 1. 核心功能 客户端向服务器发送数据, 服务器进行计算并返回结…

免费【2024】springboot OA公文发文管理系统

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

金融数据的pandas模块应用

金融数据的pandas模块应用 数据链接&#xff1a;https://pan.baidu.com/s/1VMh8-4IeCUYXB9p3rL45qw 提取码&#xff1a;c6ys 1. 导入所需基础库 import pandas as pd import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-serif][FangSong] mpl.rcP…

【基础】模拟题 角色授权类

3413. DHCP服务器 题目 提交记录 讨论 题解 视频讲解 动态主机配置协议&#xff08;Dynamic Host Configuration Protocol, DHCP&#xff09;是一种自动为网络客户端分配 IP 地址的网络协议。 当支持该协议的计算机刚刚接入网络时&#xff0c;它可以启动一个 DHCP 客户…

html改写vue日志

本人最近学了vue&#xff0c;想着练手的方法就是改写之前在公司开发的小系统前端&#xff0c;将前端的AJAXJSThymeleaf改为axiosvue。 改写html 将<html>中的<head>和<body>结构移除&#xff0c;将css部分移入<style>&#xff0c; 重新定义了全局的&…

视频共享融合赋能平台LntonCVS视频监控管理平台视频云解决方案

LntonCVS是基于国家标准GB28181协议开发的视频监控与云服务平台&#xff0c;支持多设备同时接入。该平台能够处理和分发多种视频流格式&#xff0c;包括RTSP、RTMP、FLV、HLS和WebRTC。主要功能包括视频直播监控、云端录像与存储、检索回放、智能告警、语音对讲和平台级联&…

约束

概述 概念 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 目的 保证数据库中数据的正确、有效性和完整性。 分类 【注意】约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的时候添加约束。 约束演示 根据需求&#xff0c;完成表结构的…