[Redis][Set]详细讲解

目录

  • 0.前言
  • 1.常用命令
    • 1.SADD
    • 2.SMEMBERS
    • 3.SISMEMBER
    • 4.SCARD
    • 5.SPOP
    • 6.SMOVE
    • 7.SREM
  • 2.集合间操作
    • 0.是什么?
    • 1.SINTER
    • 2.SINTERSTORE
    • 3.SUNION
    • 4.SUNIONSTORE
    • 5.SDIFF
    • 6.SDIFFSTORE
  • 3.内部编码
    • 1.intset(整数集合)
    • 2.hashtable(哈希表)
  • 4.使用场景


0.前言

  • 集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是

    • 集合中元素之间是⽆序的
    • 集合中元素不允许重复
      请添加图片描述
  • 一个集合中最多可以存储 2 32 − 1 2^{32} - 1 2321个元素

  • Redis除了⽀持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集,合理地使⽤好集合类型,能在实际开发中解决很多问题


1.常用命令

1.SADD

  • 功能:将⼀个或者多个元素添加到set
    • 注意:重复的元素⽆法添加到set
  • 语法SADD key member [member ...]
  • 返回值:本次添加成功的元素个数
  • 时间复杂度 O ( 1 ) O(1) O(1)

2.SMEMBERS

  • 功能:获取一个set中的所有元素
    • 注意:元素间的顺序是无序的
  • 语法SMEMBERS key
  • 返回值:所有元素的列表
  • 时间复杂度 O ( N ) O(N) O(N)

3.SISMEMBER

  • 功能:判断一个元素在不在set
  • 语法SISMEMBER key member
  • 返回值::
    • 1:表⽰元素在set
    • 0:表⽰元素不在set中或者key不存在
  • 时间复杂度 O ( 1 ) O(1) O(1)

4.SCARD

  • 功能:获取一个set的基数(cardinality),即set中的元素个数
  • 语法SCARD key
  • 返回值set内的元素个数
  • 时间复杂度 O ( 1 ) O(1) O(1)

5.SPOP

  • 功能:从set中删除并返回⼀个或者多个元素
    • 注意:由于set内的元素是⽆序的,所以取出哪个元素实际是未定义⾏为,即可以看作随机的
  • 语法SPOP key [count]
  • 返回值:取出的元素
  • 时间复杂度 O ( N ) O(N) O(N),N是count

6.SMOVE

  • 功能:将一个元素从源set取出并放入目标set
  • 语法SMOVE src dest member
  • 返回值:1表示移动成功,0表示失败
  • 时间复杂度 O ( 1 ) O(1) O(1)

7.SREM

  • 功能:将指定的元素从set中删除
  • 语法SREM key member [member ...]
  • 返回值:本次操作删除的元素个数
  • 时间复杂度 O ( N ) O(N) O(N),N是要删除的元素个数

2.集合间操作

0.是什么?

  • set支持交集(inter)、并集(union)、差集(diff)
    请添加图片描述

1.SINTER

  • 功能:获取给定set的交集中的元素
  • 语法SINTER key [key ...]
  • 返回值:交集的元素
  • 时间复杂度 O ( N ∗ M ) O(N*M) O(NM),N是最⼩的集合元素个数,M是最⼤的集合元素个数

2.SINTERSTORE

  • 功能:获取给定set的交集中的元素并保存到目标set
  • 语法:`SINTERSTORE dest key [key …]
  • 返回值:交集的元素个数
  • 时间复杂度 O ( N ∗ M ) O(N*M) O(NM),N是最⼩的集合元素个数,M是最⼤的集合元素个数

3.SUNION

  • 功能:获取给定set的并集中的元素
  • 语法SUNION key [key ...]
  • 返回值:并集的元素
  • 时间复杂度 O ( N ) O(N) O(N),N给定的所有集合的总的元素个数

4.SUNIONSTORE

  • 功能:获取给定set的并集中的元素并保存到⽬标set
  • 语法SUNIONSTORE dest key [key ...]
  • 返回值:并集的元素个数
  • 时间复杂度 O ( N ) O(N) O(N),N给定的所有集合的总的元素个数

5.SDIFF

  • 功能:获取给定set的差集中的元素
  • 语法SDIFF key [key ...]
  • 返回值:差集的元素
  • 时间复杂度 O ( N ) O(N) O(N),N给定的所有集合的总的元素个数

6.SDIFFSTORE

  • 功能:获取给定set的差集中的元素并保存到目标set
  • 语法SDIFFSTORE dest key [key ...]
  • 返回值:差集的元素个数
  • 时间复杂度 O ( N ) O(N) O(N),N给定的所有集合的总的元素个数

3.内部编码

1.intset(整数集合)

  • 当集合中的元素都是整数并且元素的个数⼩于set-max-intset-entries配置(默认512个)时,Redis会选⽤intset来作为集合的内部实现,从⽽减少内存的使⽤

2.hashtable(哈希表)

  • 当集合类型⽆法满⾜intset的条件时,Redis会使⽤hashtable作为集合的内部实现

4.使用场景

  • 集合类型⽐较典型的使⽤场景是标签(tag)
    • 例如:⼀个电⼦商务⽹站会对不同标签的⽤⼾做不同的产品推荐
  • 示例
    • 给用户添加标签
      sadd user:1:tags tag1 tag2 tag5
      sadd user:2:tags tag2 tag3 tag5
      ...
      sadd user:k:tags tag1 tag2 tag4
      
    • 给标签添加用户
      sadd tag1:users user:1 user:3
      sadd tag2:users user:1 user:2 user:3
      ...
      sadd tagk:users user:1 user:4 user:9 user:28
      
    • 删除用户下的标签
      srem user:1:tags tag1 tag5
      ...
      
    • 删除标签下的用户
      srem tag1:users user:1
      srem tag5:users user:1
      ...
      
    • 计算⽤⼾的共同兴趣标签
      sinter user:1:tags user:2:tags
      

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

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

相关文章

BaseCTF2024 web

Web [Week1] HTTP 是什么呀 GET: ?basectf%77%65%31%63%25%30%30%6d%65POST: BaseflgX-Forwarded-For:127.0.0.1Referer: BaseCookie: c00k13i cant eat itUser-Agent: Base有Location跳转, 抓包得到flag: QmFzZUNURntkZGUzZjA0Yy1hMDg5LTQwNGMtOTFjNi01ODZjMzAxMzM3Y2J9Cg…

[element-ui]记录对el-table表头样式的一些处理

1、表头换行 & 列表项换行 可用element-table组件自带的方法实现列标题换行的效果 2、小圆点样式

3D模型在UI设计中应用越来越多,给UI带来了什么?

当前3D模型在UI设计中应用很多,极大地拓展了UI设计的发挥空间,也拓宽了UI的应用领域,本文分享下UI中引入3D模型到底能带来什么价值. 3D模型在UI设计中的应用可以给用户界面带来以下几个方面的好处: 更真实的视觉体验:…

无人机的避障的航迹规划详解!!!

一、无人机避障技术 视觉避障系统:通过安装在无人机上的摄像头捕捉周围环境的图像,利用计算机视觉技术对图像进行处理和分析,提取出障碍物的信息。这种方法直观、信息丰富,但在光线不足或变化多的情况下可能影响识别效果&#xf…

高效快捷回复软件

当你的店铺正如火如荼地运营时,你是否曾因为繁琐的客服回复工作而感到力不从心?自己创业、自营客服或是外包客服,都需要一个强大的工具来帮助你高效处理客户咨询。那么,这款全新的高效快捷回复软件—客服宝聊天助手,就…

WLS2连接本地USB设备的方法

WLS2连接本地USB设备的方法 说明windows端1.下载usbipd-win并安装2.启动WSL3.以管理员身份运行Windows PowerShell”4.WSL中查看USB设备 说明 WLS2连接本地USB设备的方法 windows端 1.下载usbipd-win并安装 可下载**.msi文件,双击即可安装 2.启动WSL 3.以管理…

矿山、石场重型机械设备数据集-挖掘机-自卸卡车-轮式装载机

描述 本项目旨在创建一个高效的计算机或机器视觉模型,用于在建筑工地检测不同种类的施工设备,我们从三个类别开始:挖掘机、卡车和轮式装载机。 数据集的理学硕士提供。 原始图像(v1)包含: 1,532个标注…

word中的表格全部设置宽度100%

1、背景 我们用工具将数据库或其他的数据导出成word时,表格有的会大于100%,超过了边界。word没有提供全局修改的方法。如果我们想改成100%。 一种方式是通过宏,全局改。一种是手动改。 2、宏修改 如果表格多,可以通过这种方式。…

SpringBoot的概述与搭建

目录 一.SpringBoot的概述 二.SpringBoot 特点 三.SpringBoot 的核心功能 3.1起步依赖 3.2自动配置 四.SpringBoot 开发环境构建 五.SpringBoot 配置文件 六.SpringBoot数据访问管理 七.springboot注解 八.springboot集成mybatis 九.springboot全局异常捕获与处理 一…

【第十五章:Sentosa_DSML社区版-机器学习之关联规则】

目录 15.1 频繁模式增长 15.2 PrefixSpan 【第十五章:Sentosa_DSML社区版-机器学习之关联规则】 机器学习关联规则是一种用于发现数据集中项之间有趣关系的方法。它基于统计和概率理论,通过分析大量数据来识别项之间的频繁共现模式。 15.1 频繁模式增…

数据在内存中的存储以及练习(一篇带你清晰搞懂)

一:数据在内存中的存储 首先,如果要了解数据在内存中的存储,我们首先要了解一个概念 大小端是什么? 1:什么是大小端? 其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题&#xff0c…

QT-Qt概述安装Qt创建项目常用基础部件信号和槽

1. Qt概述 Qt 是一个跨平台的 C图形用户界面应用程序的开发框架。 图形用户界面: GUI (Graphical User Interface) 框架:别人写好的一堆类(工具包)和开发规则。使用框架开发,能够大大降低程序的…

新建flask项目,配置入口文件,启动项目

pycharm新建flask项目时,会提供一个创建flask项目的导向,自动设置虚拟环境,并且安装flask及其依赖而vscode新建flask项目时,需要手动设置虚拟环境并安装flask,需要在终端使用pip install flask命令来安装flask及其依赖…

代码随想录 | Day25 | 二叉树:从中序与后序遍历构造二叉树最大二叉树

代码随想录 | Day25 | 二叉树:从中序与后序遍历构造二叉树&&最大二叉树 主要学习内容: 用中序和后序来构建二叉树 106.从中序与后序遍历构造二叉树 106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode) 解法思路&a…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下玩转iSulad容器技术

828华为云征文|华为云Flexus云服务器X实例部署Xnote笔记应用 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、iSulad介绍2.1 iSulad简介2.2 iSulad特点 三、本次实践介绍3.1 本次实践…

亚信安全天穹5分钟勒索体检 免费试用今起上线

对于勒索攻击的认知 你是否还停留在“2.0时代”? 勒索攻击无疑是企业面临的最大威胁,2024年上半年,勒索组织数量同步增长超过50%,勒索攻击数量也持续攀升,平均勒索赎金突破520万美元。 当前,勒索攻击治理…

HTML5实现唐朝服饰网站模板源码

文章目录 1.设计来源1.1 网站首页-界面效果1.2 唐装演变-界面效果1.3 唐装配色-界面效果1.4 唐装花纹-界面效果1.5 唐装文化-界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcL…

华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 7 推送卡片刷新消息

场景介绍 如今衣食住行娱乐影音应用占据了大多数人的手机,一部手机可以满足日常大多需求,但对需要经常查看或进行简单操作的应用来说,总需要用户点开应用体验较繁琐。针对此种场景,HarmonyOS提供了Form Kit(卡片开发服…

如何将泰语入门提高到精通呢?

要精通泰语,需要从基础的字母和发音开始学习,并通过积累词汇、频繁练习口语、沉浸在语言环境中来不断提高。参加在线课程或找专业教师进行系统性学习也很有帮助。此外,利用各种教材和在线资源,以及保持持续和一致的学习态度&#…

Spring Boot 学习之路 -- 处理 HTTP 请求

前言 最近因为业务需要,被拉去研究后端的项目,代码框架基于 Spring Boot,对我来说完全小白,需要重新学习研究…出于个人习惯,会以 Blog 文章的方式做一些记录,文章内容基本来源于「 Spring Boot 从入门到精…