Redis:set类型

news2025/2/4 6:45:33

Redis:set类型

    • set命令
        • SADD
        • SMEMBERS
        • SISMEMBER
        • SCARD
        • SPOP
        • SRANDMEMBER
        • SMOVE
        • SREM
      • 集合间操作
        • SINTER
        • SINTERSTORE
        • SUNION
        • SUNIONSTORE
        • SDIFF
        • SDIFFSTORE
    • 内部编码
      • intset
      • hashtable


当把一些关联的数据放到一起,就构成一个集合。在Redis中,使用set类型维护集合。set维护一个不允许重复元素的无序集合,每个集合元素类型都是String


set命令

SADD
  • 将一个或多个元素添加到set中,如果不存在则创建一个集合
sadd key member [member ...]

返回本次操作添加成功的元素个数。

示例:

在这里插入图片描述

第一次saddset1不存在,此时创建集合并且插入1 2 3,返回3表示成功插入三个数字。第二次sadd,由于数字2 3已经存在,所以只插入了4 5,返回2表示成功插入两个元素。


SMEMBERS
  • 获取set中的所有元素
smembers key

示例:

查询刚才创建的set1

在这里插入图片描述


SISMEMBER
  • 判定元素是否在集合中
sismember key member

如果存在返回1,不存在返回0

示例:

在这里插入图片描述


SCARD
  • 获取集合的元素个数
scard key

返回集合的元素个数。


SPOP
  • 随机获取并删除一个或多个元素
spop key [count]

返回获取到的元素。

示例:

在这里插入图片描述

第一次spop获取元素4,既不是头也不是尾,第二次spop又得到两个随机值5 1,确实值是随机的。

官方文档中声明,spop得到的值是随机的,就算是两个相同的集合,同样的操作得到的值也不一样。因为Redis源码中给spop增加了一个生成随机成员的过程,是真正做了随机功能。


SRANDMEMBER
  • 获取set中的随即元素
srandmember key [count]

返回随机获取到的元素,count表示要获取的元素个数。

示例:

在这里插入图片描述


SMOVE
  • 将一个元素从源set移动到目的set
smove source destination member

其中source是源集合,destination是目的集合,member是被移动的元素。返回0表示移动失败,返回1表示成功。

示例:

在这里插入图片描述

此处将set2中的666元素移动到了set1中。

在移动过程中,可能出现以下两种情况:

  1. member已经在destination中存在,此时会将membersource中删除,并且spop返回1视为移动成功
  2. membersource中不存在,此时spop返回0,表示移动失败

SREM
  • 删除set中的指定元素
srem key member [member ...]

返回删除成功的元素个数。


集合间操作

除了基本的集合命令,Redis还提供了集合之间的一些命令。

SINTER
  • 对多个集合求交集
sinter key [key ...]

返回集合之间的交集。

示例:

在这里插入图片描述


SINTERSTORE
  • 求出多个集合的交集,并输出到destination
sinterstore destination key [key ...]

返回交集的元素个数。

示例:

在这里插入图片描述

此处将set1set2的交集输出到set4中,sinterstore返回3表示交集有三个元素。


SUNION
  • 得到多个set的并集
sunion key [key ...]

返回多个集合的并集。

在这里插入图片描述


SUNIONSTORE
  • 求出多个集合的并集,并输出到destination
sunionstore destination key [key ...]

返回并集中元素的个数。


SDIFF
  • 求出多个集合的差集
sdiff key [key ...]

返回差集的结果。

示例:

在这里插入图片描述

此处要注意,做差是有先后顺序的,set1 - set2set2 - set1的结果是不一样的。


SDIFFSTORE
  • 求出多个集合的差集,并输出到destination
sdiffstore key [key ...]

返回差集中元素的个数。


  • 总结
命令功能
sadd添加元素
srem删除元素
scard获取集合元素个数
sismember检测元素是否在集合中
srandmember获取随机集合元素
spop随机删除集合元素
smembers获取集合所有元素
sinter集合求并集
sinterstore集合求并集,输出到指定集合
sunion集合求交集
sunionstore集合求交集,输出到指定集合
sdiff集合求差集
sdiffstore集合求差集,输出到指定集合

内部编码

intset

整数集合,对正数进行了特定优化。当set中的元素都是整数,并且元素个数小于set-max-intset-entries(默认512个)时,Redis使用intset实现set


hashtable

当集合类型不满足以上条件,也就是成员数量太多,或者有成员不是int,那么采用hashtable哈希表来实现set


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

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

相关文章

为何没有Deepin 24了

今天在Deepin社区公布了一则消息,未来将调整Deepin社区版的发布周期和命名规则,原文内容如下: 首先说重点,未来 deepin 社区将推行以“年”为基准单位来界定版本号的策略: 每年发布1个大版本,提供2个重要…

MISC - 第12天(pyc反编译、图片宽高复原、Ziperello暴力破解工具)

前言 各位师傅大家好,我是qmx_07,今天继续讲解MISC的相关知识 喵喵喵 附件信息: 尝试了常规的binwalk,foremost扫描是否有隐藏文件、均失败 在stegsolve工具发现 Red plan 0、 Blue plan 0、 Green plan 0 有问题,怀疑是LSB隐写 Data Extr…

ISO IEC 18004 2015 PDF 文字版下载

ISO_IEC_18004_2015_en-US - 道客巴巴 (doc88.com)https://www.doc88.com/p-67816330893254.html

CPython Internals English PDF 下载地址分享

CPython Internals Your Guide to the Python 3 Interpreter.pdf官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供CPython Internals Your Guide to the Python 3 Interpreter.pdf最新版正式版官方版绿色版下载,CPython Internals Your Guide to the Pytho…

【图论】树剖(上):重链剖分

一、前置知识清单 深度优先搜索DFS 点我复习图的存储 复习链接敬请期待树状数组 点我复习 二、树剖简介 树剖(树链剖分),是一种把树划分成链的算法,该算法分为重链剖分和长链剖分。 本文仅讨论重链剖分,长链剖分目前…

基于SpringBoot的学习资源共享平台

运行环境: jdk8tomcat9mysqlIntelliJ IDEAmavennodejs 设计选用前后端分离的单体架构方式 后端:SpringBootMybatis-PluslogbackElasticsearchRedisMySQLJwtsmtp阿里云OSS 前端:WebPackVueJsAnt Designaxios 主要模块:反馈管理、资源管理、…

Django学习笔记二:数据库操作详解

Django框架提供了一个功能强大的ORM(对象关系映射)系统,使得开发者可以使用Python代码来操作数据库,而无需编写复杂的SQL语句。以下是Django数据库操作的一些基本概念和方法: 模型定义 在Django中,模型是…

大模型基础:基本概念、Prompt、RAG、Agent及多模态

随着大模型的迅猛发展,LLM 作为人工智能的核心力量,正以前所未有的方式重塑着我们的生活、学习和工作。无论是智能语音助手、自动驾驶汽车,还是智能决策系统,大模型都是幕后英雄,让这些看似不可思议的事情变为可能。本…

Spring源码-AOP具体源码

1.类ProxyFactory 核心方法:getProxy 1.DefaultAopProxyFactory#createAopProxy 判断使用JDK还是CGLIB动态代理的代码如下: Override public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {// 如果ProxyFactory的isOp…

北京市大兴区启动乐享生活 寻味大兴 美食嘉年华 系列促销费活动

北京市大兴区启动乐享生活 寻味大兴 系列促销费活动 区商务局副局长 兰莉 致开幕辞 区餐饮行业协会会长 董志明 介绍活动内容 2024年9月30日,由大兴区商务局主办、大兴区餐饮行业协会承办,并得到高米店街道和大兴绿地缤纷城大力支持的“乐享生活 寻味大…

快速排序的非递归实现:借助栈实现、借助队列实现

目录 用栈实现快速排序 1.用栈实现非递归快速排序的思路步骤 1.1.思路步骤 2.用栈实现非递归快速排序的代码 3.用栈实现非递归快速排序的整个工程 3.1.QuickSortNonR.h 3.2.QuickSortNonR.c 3.3.Stack.h 3.4.Stack.c 用队列实现非递归快速排序 1.用队列实现非递归快…

进程概念 | 进程状态 | 进程优先级

进程的基本概念 课本概念:程序的一个执行实例,正在执行的程序等。核心观点:担当分配系统资源(cpu时间、内存)的实体。 资源占用 它占用系统资源向CPU时间,内存等不同进程的资源是相互隔离的,确…

Linux中swap分区

swap 分区的创建方法演示: 方法1:fdisk (首先查看 fdisk /dev/sda 中 swapID。由于 Linux 的 fdisk 默认会将分区的 ID 设置为 Linux 的文件系统,所以需要设置一下 systemID) 解决方法 重启或者执行命令 第二个交换分…

主机可以ping通linux虚拟机但linux虚拟机无法ping通主机的解决办法

出现这个问题一般是由于物理主机的防火墙挡住了ping包,可以试试看把主机的防火墙关闭看看 如果可以ping通的话那么试试看添加规则将虚拟机ip添加进去 高级设置,入站规则,新建规则 下列ip地址添加虚拟机的ip地址(使用桥接网络&…

修改Anaconda虚拟环境默认安装路径(Linux系统)

文章目录 修改Anaconda虚拟环境默认安装路径(Linux系统)1.方法一:使用--prefix参数2.方法二:配置conda环境的默认安装位置 修改Anaconda虚拟环境默认安装路径(Linux系统) 1.方法一:使用--prefix参数 在创建虚拟环境时,使用--pre…

Vue3 中Ref的最佳实践

在vue3中如果我们需要获取一个响应式的变量,可以使用ref来定义一个变量。 const name ref( "" );name.value "test" 定义好后,就可以实现修改状态,更新UI的效果了。 在这个基础上,本文主要讨论跨组件时如何…

基于STM32的智能风扇控制系统设计

引言 本项目将基于STM32微控制器设计一个智能风扇控制系统,通过温度传感器实时检测环境温度,并根据预设的温度范围自动调节风扇的转速。该系统展示了STM32的PWM输出、传感器接口以及自动控制应用的实现。 环境准备 1. 硬件设备 STM32F103C8T6 开发板…

Python 语言学习——应用1.1 数字图像处理(第一节,颜色)

目录 1.基础知识 2.实战演示 1.基础知识: 1.图像的表示. 函数表示:图像是二维信号,定义为二维函数f(x,y),其中,x、y是空间坐标,f(x,y)是点(x,y)的幅值。拓展看,视频,又称动态图像…

SOMEIP_ETS_166: SD_TestFieldUINT8

测试目的: 验证DUT能够通过Getter和Setter方法正确地发送和接收TestFieldUINT8字段的值。 描述 本测试用例旨在确保DUT的ETS能够响应Tester的请求,正确地使用Getter方法获取TestFieldUINT8的值,以及使用Setter方法设置新的值。 测试拓扑&…

QGIS中怎么加载数据(如矢量shp与栅格数据)

最近有不少初学者来问我qgis里怎么加载数据 这个与arcgis中的操作其实也是类似的,也是通过软件的里面+号就行了 下面是我对这个问题的解决思路: 一种是直接把图层文件拖进去,但是这种方法很有局限性,下面我还说明一…