redis:set集合命令,内部编码,使用场景

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》《网络》 《redis学习笔记》

文章目录

  • 前言
  • 命令
    • SADD
    • SMEMBERS
    • SISMEMBER
    • SCARD
    • SPOP
    • SMOVE
    • SREM
    • 集合间操作
      • SINTER
      • SINTERSTORE
      • SUNION
      • SUNIONSTORE
      • SDIFF
      • SDIFFSTORE
  • 内部编码
  • 使用场景
  • 总结


前言

ste集合类型是保存多个字符串类型的元素,但和列表类型不同,集合中元素之间是无序的,元素也不允许重复。

在这里插入图片描述

redis除了支持集合内的增删查改操作,同时支持多个集合取交集,并集,差集。


命令

SADD

将一个或者多个元素添加到 set 中。重复元素无法添加到 set 中

SADD key member [ member … ]

返回值:本次添加成功的元素个数
时间复杂度:O(1)

在这里插入图片描述


SMEMBERS

获取一个set中所有元素。元素间的顺序是无序的,获取结果的顺序是随机的

SMEMBERS key

返回值:所有元素的列表
时间复杂度:O(N),N为集合元素个数

在这里插入图片描述


注意:
如果执行多次smembers命令,获取结果顺序一致,可能有以下原因:
在这里插入图片描述


SISMEMBER

判断一个元素在不在 set 中

SISMEMBER key member

返回值:1 表示元素在 set 中;0 表示元素不在 set 中 或者 key 不存在
时间复杂度:O(1),set 集合是通过哈希表来实现的

在这里插入图片描述


SCARD

获取一个 set 的基数,即 set 中的元素个数

SCARD key

返回值:set 内元素的个数
时间复杂度:O(1)

在这里插入图片描述


SPOP

从 set 中删除并返回一个或者多个元素。由于 set 内的元素是无序的,所以取出哪个元素实际是未定义行为,即spop删除元素就是随机删除

SPOP key [count]

返回值:取出的元素
时间复杂度:O(N),N为count的个数

在这里插入图片描述
在这里插入图片描述


SMOVE

将一个元素从 source 取出并放入 destrination 中

SMOVE source destrination member

返回值:1 表示移动成功;0 表示失败
时间复杂度:O(1)
在这里插入图片描述


SREM

将指定的元素从 set 中删除

SREM key member [member …]

返回值:本次删除操作删除的元素个数
时间复杂度:O(N),N为要删除的元素个数

在这里插入图片描述


集合间操作

在这里插入图片描述

SINTER

获取给定 set 的交集中的元素

SINTER key [key …]

返回值:交集的元素
时间复杂度:O(N * M), N是最小的集合元素个数,M是最大集合的元素个数

在这里插入图片描述


SINTERSTORE

获取给定 set 的交集中的元素并保存到目的 set 中

SINTERSTORE destination key [key …]

返回值:交集的元素个数
时间复杂度:O(N * M),N是最小的集合元素个数,M是最大的集合元素个数
在这里插入图片描述


SUNION

获取给定 set 的并集中的元素

SUNION key [key …]

返回值:并集的元素
时间复杂度:O(N),N给定的所有集合的总的元素个数

在这里插入图片描述


SUNIONSTORE

获取给定 set 的并集中的元素并保存到目的 set 中

SUNIONSTORE destination key [key …]

返回值:并集的元素个数
时间复杂度:O(N),N为给定的所有集合的总元素个数

在这里插入图片描述


SDIFF

获取给定 set 的差集中的元素

SDIFF key [ key … ]

返回值:差集的元素
时间复杂度:O(N),N给定的所有集合的总的元素个数
在这里插入图片描述


SDIFFSTORE

获取给定 set 的差集中的元素并保存到目标 set 中

SDIFFSTORE destination key [key …]

返回值:差集的元素个数
时间复杂度:O(N),N为给定的所有集合的总元素个数

在这里插入图片描述

内部编码

集合类型的内部编码有两种:

  • intset(整数集合):当集合中的元素都是整数并且元素的个数小于 set-max-inset-entries 配置时,redis会使用 intset来作为集合的内部实现;intset是一种紧凑的数据结构,专门用于存储整数数值,通过压缩存储,intset能够节省内存空间
  • hashtable(哈希表):当集合类型无法 intset 的条件时,redis会使用hashtable作为集合的内部实现;hashtable允许存储各种类型的元素,set集合的每个元素都作为一个字符串对象存储,而对应的值则统一为nullptr

在这里插入图片描述

使用场景

  1. 使用 set 来保存用户的标签;标签也就是用户画像,分析出用户的一些特征,分析清楚特征之后,再投其所好
  2. 使用 set 来计算用户之间的共同好友;基于 “集合求交集”,A 和 B是好友,B 和 C是好友,B 和 C 和 D都是好友,就可以将D推荐给A
  3. 使用 set 统计 UV(独立访客数量);每一个用户,访问服务器,都会产生一个 UV,但是同一个用户多次访问,不会是UV增加,UV需要按照用户进行去重

总结

以上就是我的redis学习笔记

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧工地:引领工地管理和监测的革新

一、智慧工地是什么 智慧工地是智慧地球理念在工程领域的具体应用,是工程全生命周期管理的崭新理念。通过运用信息化手段,智慧工地利用三维设计平台对工程项目进行精确设计和施工模拟,重点关注施工过程管理,建立互联协同、智能生…

如何在Linux系统中使用Netcat进行网络调试

文章目录 Netcat简介安装Netcat在Debian/Ubuntu系统中安装在CentOS/RHEL系统中安装 Netcat基本命令Netcat基本用法示例1:监听端口示例2:连接到远程主机 Netcat选项-l选项-p选项-v选项 Netcat模式监听模式连接模式 Netcat排除和包含排除端口包含端口 Netc…

《AI产品经理手册》——解锁AI时代的商业密钥

在当今这个日新月异的AI时代,每一位产品经理都面临着前所未有的挑战与机遇,唯有紧跟时代潮流,深入掌握AI技术的精髓,才能在激烈的市场竞争中独占鳌头。《AI产品经理手册》正是这样一部为AI产品经理量身定制的实战宝典,…

多核架构的基本概念

目录 1.为什么使用多核 2.多核分类 2.1 同构和异构 2.2 SMP和AMP 3 小结 1.为什么使用多核 这个问题个人认为可以从两个方面来看: 性能问题 随着汽车ECU对集成化的要求越来越高,把多个ECU功能集中到一个多核MCU的需求也越来越明显。 以汽车制动…

NeurIPS 2024 | 机器人操纵世界模型来了,成功率超过谷歌RT-1 26.6%

对于人类而言,一旦掌握了 “打开瓶盖” 的动作,面对 “拧紧螺丝” 这样的任务通常也能游刃有余,因为这两者依赖于相似的手部动作。然而,对于机器人来说,即使是这样看似简单的任务转换依然充满挑战。例如,换…

OceanBase V4.3.3,首个面向实时分析场景的GA版本发布

在10月23日举办的 OceanBase年度发布会 上,我们怀着激动之情,正式向大家宣布了 OceanBase 4.3.3 GA 版的正式发布,这也是OceanBase 为实时分析(AP)场景打造的首个GA版本。 2024 年初,我们推出了 4.3.0 版本…

TS-AWG控制电光调制器:推动科技应用新发展的利器

一、电光调制有什么用? 如今,基于光学、光子学和脉冲激光以及电光调制器的应用正变得极为流行,最新一代科学家正在为其实际应用开辟新领域,如汽车激光雷达、医疗解决方案、航空航天和国防、量子和激光传感器。 测试挑战、上市时…

程序员开发速查表

作为一名苦逼的程序员,在开发的过程中,我们总是在各种编程语言中来回穿梭,忙完后端整前端,还得做一部分的运维工作,忙的我们有时候忘记语法,忘记编写规则,甚至混淆。这时候我们就希望有一个综合…

要在微信小程序中让一个 `view` 元素内部的文字水平垂直居中,可以使用 Flexbox 布局

文章目录 主要特点:基本用法:常用属性: 要在微信小程序中让一个 view 元素内部的文字水平垂直居中,可以使用 Flexbox 布局。以下是如何设置样式的示例: .scan-button {display: flex; /* 启用 Flexbox 布局 */justify…

docker pull 拉取镜像失败,使用Docker离线包

1、登录并注册Github,然后在Github中搜索并打开“wukongdaily/DockerTarBuilder” 项目,在该项目主页点击“Fork”。 然后点 “Create Fork”,将项目创建到自己的Github主页。 2、接着在自己创建过来的这个项目中点击“Actions” 3、然后…

基于Leaflet的自助标绘源码解析-其它对象解析

目录 前言 一、整体类图介绍 1、整体类图 二、进攻方向类对象标绘实现 1、基础配置 2、各组成部分的绘制 三、集结地对象的标绘实现 1、对象图形绘制 四、钳击对象的标绘实现 1、基础配置 2、各部分标绘 五、总结 前言 在之前的自助标绘相关博文中,我们…

基于机器学习的健身房会员健康风险分类及预测分析

1.项目背景 随着健康意识的提升和健身文化的普及,人们对科学健身和个性化训练的需求日益增长,健身房会员的锻炼模式和健康管理需求呈现出新的特点,本项目使用基于真实健身模式生成的973位会员数据进行深入分析,探索不同会员群体的…

如何在本地Linux服务器搭建WordPress网站结合内网穿透随时随地可访问

文章目录 前言1. 安装WordPress2. 创建WordPress数据库3. 安装相对URL插件4. 安装内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 配置WordPress固定公网地址 前言 本文主要介绍如何在Linux Ubuntu系统上使用WordPress搭建一个本地网站&#xff0c…

30条勒索病毒处置原则

当前,勒索病毒在全球范围内肆虐,成为企业数据资产安全的头号威胁。这些狡猾的恶意软件,如同网络空间中的幽灵,不断寻找并利用系统的漏洞,通过加密数据或窃取敏感信息,向企业索取高额赎金。一旦感染&#xf…

【MongoDB】Windows/Docker 下载安装,MongoDB Compass的基本使用、NoSQL、MongoDB的基础概念及基础用法(超详细)

文章目录 Windows下载MongoDB Compass使用NoSQL的基本概念MongoDB常用术语MongoDB与RDBMS区别MongoDB的CRUD 更多相关内容可查看 Docker安装MongoDB可查看:Docker-安装MongoDB Windows下载 官网下载地址:https://www.mongodb.com/try/download/communi…

爬虫学习4

from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …

springboot yml文件数据源出现警告/报黄/数据库配置警告问题

1、看一下数据源的依赖是不是都引入完整了 2、看一下数据源是否有拼写错误 上图就是数据源拼写错误

配置深度学习环境

先前已经配置好了 1在新建一个项目时 2.打开文件,找到设置 3.点开设置 如图1.2.3所示

MySQL初学之旅(1)配置与基础操作

目录 1.前言 2.正文 2.1数据库的发展历程 2.2数据库的基础操作 2.2.1启动服务 2.2.2创建与删除数据库 2.2.3数据类型 2.2.4创建表与删除表 2.3MySQL Workbench基础使用简介 3.小结 1.前言 哈喽大家好吖,今天博主正式开始为大家分享数据库的学习&#xff…

好用且免费的工具分享

在当今数字化时代,AI工具的普及极大地提升了我们的工作效率和生活品质。最近发现一个功能强大、免费好用的AI工具,叫做“灵办AI”。 无论是打工人还是学生党,用了它绝对能让你效率起飞!它不同于市面上专注于特定领域的产品&#x…