当前位置: 首页 > article >正文

【Redis】set 和 zset 类型的介绍和常用命令

1. set

1.1 介绍

set 类型和 list 不同的是,存储的元素是无序的,并且元素不允许重复,Redis 除了支持集合内的增删查改操作,还支持多个集合取交集,并集,差集

1.2 常用命令

命令

介绍

时间复杂度

sadd key element [element ...]

将一个或多个元素添加到指定的集合中

O (k),k 是要添加的元素个数

srem key element [element ...]

从指定集合中移除一个或多个元素

O (k),k 是要移除的元素个数

scard key

获取指定集合中的元素数量

O (1)

sismember key element

判断指定元素是否存在于集合中

O (1)

srandmember key [count]

从指定集合中随机返回一个或多个元素

O (n),n 是count的值

spop key [count]

从指定集合中随机移除并返回一个或多个元素

O (n),n 是count的值。

smembers key

获取指定集合中的所有元素。

O (k),k 是集合中的元素个数

sinter key [key ...] sinterstore

求多个集合的交集

O (m * k),k 是几个集合中元素最小的个数,m 是参与交集计算的键个数

sunion key [key ...] sunionstore

求多个集合的并集

O (k),k 是多个集合的元素个数总和

sdiff key [key ...] sdiffstore

求多个集合的差集

O (k),k 是多个集合的元素个数总和

1.3 内部编码

intset:当集合中的所有元素都是整数,并且元素数量较少时会使用intset编码来存储集合

hashtable:当集合中的元素不满足intset的条件,会使用hashtable编码来存储集合

1.4 应用场景

用户标签:为用户、商品等实体打标签,每个实体对应一个 Set,标签作为 Set 中的元素。

去重:在处理大量数据时,经常需要去除重复元素。例如在日志分析中,记录用户的访问 IP 地址,使用 Set 可以自动对 IP 进行去重,保证每个 IP 只被记录一次。

2. zset

2.1 介绍

zset 保留了 set 集合中不能有重复成员的特点,与之不同的是,zset 中的元素是有序的,集合中的每一个元素都有一个唯一的浮点类型的分数(score)与之关联,依次来进行排序,使得有序集合中的元素可以维护有序性,虽然集合中的元素是不能重复的,但是分数允许重复。

2.2 常用命令

命令

介绍

时间复杂度

zadd key score member [score member ...]

向有序集合中添加一个或多个成员,以及成员对应的分值

O (k * log (n)),k 是添加成员的个数,n 是当前有序集合的元素个数

zcard key

获取有序集合的成员数量

O (1)

zscore key member

获取有序集合中指定成员的分值

O (1)

zrank key member

返回有序集合中指定成员的排名(从 0 开始,按分值从小到大排序)

O (log (n)),n 是当前有序集合的元素个数

zrevrank key member

返回有序集合中指定成员的排名(从 0 开始,按分值从大到小排序)

O (log (n)),n 是当前有序集合的元素个数

zrem key member [member ...]

移除有序集合中的一个或多个成员

O (k * log (n)),k 是删除成员的个数,n 是当前有序集合的元素个数

zincrby key increment member

为有序集合中指定成员的分值加上增量 increment

O (log (n)),n 是当前有序集合的元素个数

zrange key start end [withscores]

按分值从小到大返回有序集合中指定区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zrevrange key start end [withscores]

按分值从大到小返回有序集合中指定区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zrangebyscore key min max [withscores]

按分值从小到大返回有序集合中指定分值区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zrevrangebyscore key max min [withscores]

按分值从大到小返回有序集合中指定分值区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zcount key min max

计算有序集合中指定分值区间内成员的数量

O (log (n)),n 是当前有序集合的元素个数

zremrangebyrank key start end

按排名删除有序集合中指定区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zremrangebyscore key min max

按分值删除有序集合中指定分值区间内的成员

O (k + log (n)),k 是获取成员的个数,n 是当前有序集合的元素个数

zinterstore destination numkeys key [key ...]

计算给定的一个或多个有序集合的交集,并将结果存储在新的有序集合 destination 中

O (n * k) + O (m * log (m)),n 是输入集合最小的元素个数,k 是集合个数,m 是目标集合元素个数

zunionstore destination numkeys key [key ...]

计算给定的一个或多个有序集合的并集,并将结果存储在新的有序集合 destination 中

O (n) + O (m * log (m)),n 是输入集合总元素个数,m 是目标集合元素个数
 

2.3 内部编码

ziplist:如果有序集合中的元素个数较少,或者单个元素体积较小,就使用 ziplist 存储

skiplist:如果元素个数较多或者单个元素体积较大,使用 skiplist 存储

2.4 应用场景

基于 zset 有序的特点,可以用到很多场景中:

  1. 排行榜系统:比如游戏中的玩家排行榜,以玩家的积分作为分值,玩家昵称作为成员,能按分值(积分)对玩家进行排序,快速获取排名靠前或特定区间的玩家信息;视频平台的视频热度排行榜,以视频的播放量、点赞数等综合指标作为分值,视频 ID 作为成员,展示热门视频。
  2. 计分系统:在在线考试系统中,以考生的考试成绩作为分值,考生 ID 作为成员,可方便统计成绩排名、获取特定分数段的考生信息。

相关文章:

【Redis】set 和 zset 类型的介绍和常用命令

1. set 1.1 介绍 set 类型和 list 不同的是,存储的元素是无序的,并且元素不允许重复,Redis 除了支持集合内的增删查改操作,还支持多个集合取交集,并集,差集 1.2 常用命令 命令 介绍 时间复杂度 sadd …...

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<3>

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们来对上一节做一些小补充,了解学习一下assert断言,指针的使用和传址调用…...

代码随想录-训练营-day16

530. 二叉搜索树的最小绝对差 - 力扣(LeetCode) /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode…...

Vue 3 中的父子组件传值:详细示例与解析

在 Vue 3 中,父子组件之间的数据传递是一个常见的需求。父组件可以通过 props 将数据传递给子组件,而子组件可以通过 defineProps 接收这些数据。本文将详细介绍父子组件传值的使用方法,并通过优化后的代码示例演示如何实现。 1. 父子组件传值…...

谈谈你所了解的AR技术吧!

深入探讨 AR 技术的原理与应用 在科技飞速发展的今天,AR(增强现实)技术已经悄然改变了我们与周围世界互动的方式。你是否曾想象过如何能够通过手机屏幕与虚拟物体进行实时互动?在这篇文章中,我们将深入探讨AR技术的原…...

神经网络的数据流动过程(张量的转换和输出)

文章目录 1、文本从输入到输出,经历了什么?2、数据流动过程是张量,如何知道张量表达的文本内容?3、词转为张量、张量转为词是唯一的吗?为什么?4、如何保证词张量的质量和合理性5、总结 🍃作者介…...

爬取鲜花网站数据

待爬取网页: 代码: import requestsfrom lxml import etree import pandas as pdfrom lxml import html import xlwturl "https://www.haohua.com/xianhua/"header {"accept":"image/avif,image/webp,image/apng,image/sv…...

vue框架技术相关概述以及前端框架整合

vue框架技术概述及前端框架整合 1 node.js 介绍:什么是node.js Node.js就是运行在服务端的JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎。 作用 1 运行java需要安装JDK,而Node.js是JavaScript的运行环…...

深入解析 C++ 字符串处理:提取和分割的多种方法

在 C 编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时。本文将详细探讨如何使用 C 标准库中的工具(如 std::istringstream 和 std::string 的成员函数)来提取和分割字符串,并分析不同方法的适…...

数据结构 树2

文章目录 前言 一,二叉搜索树的高度 二,广度优先VS深度优先 三,广度优先的代码实现 四,深度优先代码实现 五,判断是否为二叉搜索树 六,删除一个节点 七,二叉收索树的中序后续节点 总结 …...

NeetCode刷题第19天(2025.1.31)

文章目录 099 Maximum Product Subarray 最大乘积子数组100 Word Break 断字101 Longest Increasing Subsequence 最长递增的子序列102 Maximum Product Subarray 最大乘积子数组103 Partition Equal Subset Sum 分区等于子集和104 Unique Paths 唯一路径105 Longest Common Su…...

Google Chrome-便携增强版[解压即用]

Google Chrome-便携增强版 链接:https://pan.xunlei.com/s/VOI0OyrhUx3biEbFgJyLl-Z8A1?pwdf5qa# a 特点描述 √ 无升级、便携式、绿色免安装,即可以覆盖更新又能解压使用! √ 此增强版,支持右键解压使用 √ 加入Chrome增强…...

[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型

Paper Card 论文标题:RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者:Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接:https://arxiv.org/ab…...

什么是Rust?它有什么特点?为什么要学习Rust?

什么是Rust?它有什么特点?为什么要学习Rust? 如果你是一名编程初学者,或者已经有一些编程经验但对Rust感兴趣,那么这篇文章就是为你准备的!我们将用简单易懂的语言,带你了解Rust是什么、它有什…...

[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型

Paper Card 论文标题:Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者:Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…...

AIP-134 标准方法:Update

编号134原文链接AIP-134: Standard methods: Update状态批准创建日期2019-01-24更新日期2022-06-02 REST API通常向资源URI(如 /v1/publishers/{publisher}/books/{book} )发出 PATCH 或 PUT 请求,更新资源。 面向资源设计(AIP-…...

计算机网络一点事(24)

TCP可靠传输,流量控制 可靠传输:每字节对应一个序号 累计确认:收到ack则正确接收 返回ack推迟确认(不超过0.5s) 两种ack:专门确认(只有首部无数据) 捎带确认(带数据…...

DIFY源码解析

偶然发现Github上某位大佬开源的DIFY源码注释和解析,目前还处于陆续不断更新地更新过程中,为大佬的专业和开源贡献精神点赞。先收藏链接,后续慢慢学习。 相关链接如下: DIFY源码解析...

Kafka SSL(TLS)安全协议

文章目录 Kafka SSL(TLS)安全协议1. Kafka SSL 的作用1.1 数据加密1.2 身份认证1.3 数据完整性1.4 防止中间人攻击1.5 确保安全的分布式环境1.6 防止拒绝服务(DoS)攻击 2. Kafka SSL 配置步骤(1)创建 SSL 证…...

hexo部署到github page时,hexo d后page里面绑定的个人域名消失的问题

Hexo 部署博客到 GitHub page 后,可以在 setting 中的 page 中绑定自己的域名,但是我发现更新博客后绑定的域名消失,恢复原始的 githubio 的域名。 后面搜索发现需要在 repo 里面添加 CNAME 文件,内容为 page 里面绑定的域名&…...

【Block总结】MAB,多尺度注意力块|即插即用

文章目录 一、论文信息二、创新点三、方法MAB模块解读1、MAB模块概述2、MAB模块组成3、MAB模块的优势 四、效果五、实验结果六、总结代码 一、论文信息 标题: Multi-scale Attention Network for Single Image Super-Resolution作者: Yan Wang, Yusen Li, Gang Wang, Xiaoguan…...

移动互联网用户行为习惯哪些变化,对小程序的发展有哪些积极影响

一、碎片化时间利用增加 随着生活节奏的加快,移动互联网用户的碎片化时间越来越多。在等公交、排队、乘坐地铁等间隙,用户更倾向于使用便捷、快速启动的应用来满足即时需求。小程序正好满足了这一需求,无需下载安装,随时可用&…...

使用UpdateCursor删除行

UpdateCursor除了可以编辑表或要素类的行外,还可以删除行.但要记住,在编辑会话外删除行时,更改是永久性的. 操作方法: 1.打开IDLE,新建一个脚本 2.导入arcpy和os模块 import arcpy import os 3.设置工作空间 arcpy.env.workspace "<>" 4.在with语句中新…...

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI&#xff0c;是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手&#xff0c;感觉收获还蛮多的&#xff0c;今天来分享下开发过程中的一些经验~ 为啥要做这个…...

1.4 Go 数组

一、数组 1、简介 数组是切片的基础 数组是一个固定长度、由相同类型元素组成的集合。在 Go 语言中&#xff0c;数组的长度是类型的一部分&#xff0c;因此 [5]int 和 [10]int 是两种不同的类型。数组的大小在声明时确定&#xff0c;且不可更改。 简单来说&#xff0c;数组…...

攻防世界_simple_php

同类型题&#xff08;更难版->&#xff09;攻防世界_Web(easyphp)&#xff08;php代码审计/json格式/php弱类型匹配&#xff09; php代码审计 show_source(__FILE__)&#xff1a;show_source() 函数用于显示指定文件的源代码&#xff0c;并进行语法高亮显示。__FILE__ 是魔…...

如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?

在 C# 中,using语句用于自动释放实现了IDisposable接口的对象所占用的非托管资源,如文件句柄、数据库连接、图形句柄等。其使用方式如下: 基础用法 声明并初始化资源对象:在using关键字后的括号内声明并初始化一个实现了IDisposable接口的对象。使用资源:在using语句块内…...

C++哈希(链地址法)(二)详解

文章目录 1.开放地址法1.1key不能取模的问题1.1.1将字符串转为整型1.1.2将日期类转为整型 2.哈希函数2.1乘法散列法&#xff08;了解&#xff09;2.2全域散列法&#xff08;了解&#xff09; 3.处理哈希冲突3.1线性探测&#xff08;挨着找&#xff09;3.2二次探测&#xff08;跳…...

Solon Cloud Gateway 开发:导引

Solon Cloud Gateway 是 Solon Cloud 体系提供的分布式网关实现&#xff08;轻量级实现&#xff09;。 分布式网关的特点&#xff08;相对于本地网关&#xff09;&#xff1a; 提供服务路由能力提供各种拦截支持 1、分布式网关推荐 建议使用专业的分布式网关产品&#xff0…...

科技快讯 | OpenAI首次向免费用户开放推理模型;特朗普与黄仁勋会面;雷军回应“10后小学生深情表白小米SU7”

不用开口&#xff1a;谷歌 AI 帮你致电商家&#xff0c;价格、预约一键搞定 谷歌在1月30日推出Search Labs中的“Ask for Me”实验性功能&#xff0c;用户可利用AI代替自己致电商家咨询价格和服务。该功能已与美汽车修理厂和美甲沙龙店合作&#xff0c;用户需加入Search Labs并…...