Redis数据类型 - 集合Set

Redis的五大数据类型之集合(Set)的总结 Set简介 Redis的Set是String类型的无序集合,不同于List,Set中的元素不可以重复。Redis 中集合(Set)是通过哈希表(HashTable)实现的,所以添加,删除,查找的复杂度都是 O(1)。 Set的常用操作命令总结 图片来源:https://www.runoob.com/redis/redis-sets.html 部分命令使用实例 1.SADD、SPOP、SMEMBERS SADD key member1 [member2] 向集合key中添加一个或多个成员,成员不重复添加。如果集合key不存在,则新建集合key,并添加member元素到集合key中。返回添加成功 立即下载

一、集合(Set)简介

Redis的集合建和列表键相似,允许将任意多个元素存储到集合中,但集合与列表有两个区别:

  • 列表可以存储重复元素,而集合只会存储非重复元素,如果将一个重复的元素添加到集合中,将被忽略;
  • 列表以有序方式存储元素,而集合中的元素是无序存放的。

这两个区别带来的差异主要体现在命令的复杂度,在执行像LINSERT和LREM这种针对单个元素的命令时,程序有时候不得不遍历整个列表以确定指定的元素是否存在,因此这些命令的复杂度都是O(N);而对于集合来说,所有针对单个元素的命令都不需要遍历整个集合,所以复杂度为(O1)。因为Redis中列表list底层使用quicklist实现,集合set底层使用intset和哈希表实现。

当我们需要存储多个元素时,如果可以以无序方式存储,并且需要不重复,就可以使用集合来存储这些元素,从而有效利用集合操作的效率优势。

二、集合Set常用命令

  • 添加元素到集合

通过使用SADD命令,可以将一个或多个元素添加到集合中;
语法格式:SADD key element1 element2 …,如

# 向集合fruit中添加三个元素apple、orange、banana
SADD fruit 'apple' 'orange' 'banana'

当指定集合不存在时,会先创建集合,再添加元素;添加时遇到已存在的数据时,会将其忽略。

  • 从集合中移除数据

和列表的LREM命令神似,集合的移除命令是SREM,可用于从集合中移除一个或多个数据;
语法格式:SREM key element1 element2 …,如

# 移除集合fruit中的orange和banana
SREM fruit 'orange' 'banana'

如果用户给定的元素并不存在于集合当中,那么SREM命令将忽略不存在的元素,只移除那些确实存在的元素。

  • 随机从集合中移除指定数量的元素

SPOP命令用于从集合中随机的移除指定数量的元素
语法格式:SPOP key [count],[count]表示数量可选,当不指定时只移除一个元素,如

# 随机移除fruit集合中的一个元素
SPOP fruit

# 随机移除fruit集合中的3个元素
SPOP fruit 3

SPOP命令会返回被移除的元素作为返回值

  • 将元素从一个集合移动到另一个集合
    SMOVE命令用于将一个指定的元素从源集合移动到另一个集合
    语法格式:SMOVE source target element,如
# 将fruit集合中的apple移动到bukets集合
SMOVE fruit bukets 'apple'

如果源集合中不存在想要移动的元素,那么SMOVE将放弃执行移动操作,并返回0表示移动操作执行失败

  • 获取集合中的所有元素

通过使用SMEMBERS命令,可以获取集合包含的所有元素(member,成员的意思)
语法格式:SMEMBERS key ,如

# 获取fruit集合中的所有元素
SMEMBERS fruit 
  • 随机获取集合中的元素

通过使用SRANDMEMBER命令,可以获取指定集合中的随机元素,并且可以指定获取数量(RAND是random的简写,随机的意思)
语法格式:SRANDMEMEBR key [count],[count]表示数量可选,不指定时获取一个,如

#获取集合fruit中的随机一个元素
SRANDMEMBER fruit

#获取fruit集合中随机两个元素
SRANDMEMBER fruit 2

count也可以是负值,当其为负数时,就取绝对值,如-3 表明随机获得3个元素

SRANDMEMBER命令与SPOP命令的区别在于SOPO命令会移除随机选中的元素,而SRANDMEMEBR命令则不会

  • 获取集合中元素的数量

获取集合中元素数量的命令是SCARD命令
语法格式:SCARD key ,如

#获取fruit集合中元素的数量
SCARD fruit
  • 判断集合中是否包含给定元素

通过使用SISMEMBER命令,可以判断集合中是否包含给定元素
语法格式:SISMEMBERS key element,如

# 判断fruit集合中是否含有strawberry
SISMEMBERS fruit 'strawberry'

SISMEMBERS命令返回1表示给定的元素存在于集合中,而放回0表示不存在

  • 获取多个集合中相同的元素

SINTER命令可以计算出用户给定的所有集合的交集,然后返回这个交集中的所有元素
语法格式:SINTER key1 key2 …,如

# 获取fruit和bukets中相同的元素
SINTER fruit bukets

除此之外,还有一个SINTERSTORE命令,这个命令key把给定集合的交集计算结果存储到指定的key当中,语法格式为SINTERSTORE destination_key key1 key2 …,如果给定的destination_key已经存在,那么SINTERSTORE命令在执行存储操作之前会先删除已有的键,在SINTERSTORE命令执行完后将返回被存储的交集元素的个数作为返回值。

  • 获取多个集合的所有元素

SUNION命令可以计算出给定的所有集合的并集,也就是说可以将给定集合的元素进行合并返回,同时会去重
语法格式:SUNION key1 key2 …,如

# 获取fruit和bukets中的所有元素
SUNION fruit bukets

与SINTERSTORE命令类似,SUNIONSTORE命令可将并集的计算结果存储到指定的key中。

  • 获取指定多个集合中所有不相同的元素

SDIFF命令用于获得多个集合之间的差集,也就是说如果一个集合中有元素 a、b、c,另一个集合中有元素c、d,那么它们的差集就是a、b
语法格式:SDIFF key1 key2 …

与SINTERSTORE和SUNIONSTORE相似,SDIFF对应的有SDIFFSTORE命令

对集合执行交集、并集、差集计算时,会耗费大量资源,且当涉及的元素数量非常大时,Redis服务器在计算时可能会被阻塞,这时可以考虑使用Redis的复制功能,通过从服务器来执行集合计算任务,从而确保主服务器可以继续处理其他客户端的命令请求。

从零开始:使用COLMAP与OpenMVS构建高精度三维Mesh模型 本文为零基础新手提供了使用COLMAP与OpenMVS构建高精度三维Mesh模型的完整实战指南。详细介绍了从环境配置、数据采集黄金法则,到COLMAP稀疏与稠密重建、OpenMVS网格生成与纹理映射的每一步操作,并分享了关键的避坑技巧与参数调优建议,帮助读者从二维照片中成功重建出属于自己的三维模型。 阅读详情

相关推荐

多模态特征融合方法总结

由于本人的研究是文本、语音和图像三者模态数据的融合,所以针对的是这三种模态的特征融合方法进行总结。 首先,多模态特征融合的方法大体分为三种

华辰烟雨的博客 9万+

redis限制set大小_限制Redis使用的最大内存

一、内存到达最大限制移除策略LRU: Least Recently Used 最少最近使用(从时间跨度上来,访问时间在最早的那个优先剔除)访问时间最早的优先剔除LFU: Least Frequently Used 访问次数最少的优先剔除。1.volatile-lru -> Evict using approximated LRU among the keys with an expire ...

weixin_39533742的博客 2337

DAP-Link DIY复刻指南

DAP-Link是ARM开源的一个项目,主要用于代码下载以及调试,支持SWD和JTAG调试接口,对于开发嵌入式的同学相信都或多或少有所耳闻。除了DAP-Link之外还有很多同类型的调试器,如ST-LinkJ-Link,但是这些都是不开源的,无法复刻或进行二次开发。但DAP-Link不同,完全开源,不用担心侵权问题,且随着开源社区大家的共同努力,DAP-Link经过了不断的迭代,先如今已取代ARM之前推出的CMSIS-DAP开源项目。

爱出名的狗腿子 1万+

redis list 设置队列大小

Redis列表类型的最大长度(maxlen)功能直到版本6.2才被引入,它可以用于为列表设置最大长度,实现有限大小的队列。

西京刀客 5469

LS-Dyna模态分析实战:从模型构建到结果解读的全流程指南

本文提供了一份详尽的LS-Dyna模态分析实战指南。文章系统讲解了如何利用LS-Dyna内置的隐式求解器进行特征值求解,从模型构建、几何清理、材料与连接设置,到核心的边界条件与隐式求解控制(如*CONTROL_IMPLICIT_EIGENVALUE),最后完成计算并解读频率与振型结果。旨在帮助工程师在熟悉的环境中高效完成结构振动特性分析,为后续动态响应分析奠定基础。

info6的博客 255

深入解析Unity3D中PostLateUpdate突然占用大量时间的原因

在Unity3D的生命周期中,是一个在LateUpdate之后被调用的方法。它通常用于处理一些需要在所有更新(包括物理更新和动画更新)之后进行的逻辑。由于它在游戏循环的后期阶段被调用,因此它通常用于处理与渲染直接相关的任务,如相机调整、UI更新等。突然占用大量时间的问题可能由多种原因引起,包括复杂的逻辑处理、频繁的资源加载、不恰当的渲染优化、插件或第三方库的副作用以及内存泄漏或垃圾回收等。为了解决这个问题,开发者需要仔细审查和优化中的代码,同时利用Unity提供的工具来监控和分析游戏性能。

Yori_22的博客 974

不同场景Redis集合类型数据结构的选择(Hash、List、Set、Zset各数据类型的最大存储长度)

先给出指导意见: 多个集合操作(聚合操作)----用Set; 集合数据排序(排序操作) ---- 分页排序建议使用ZSet; 集合数据只有0、1两种状态(二值型数据)----------- 0/1状态数据建议使用Bitmap; 集合中不重复元素个数(基数统计)----如果数据量达到亿级的话建议使用HyperLogLog。 1. 多个集合操作(聚合操作) Set—求多个集合数据的并、差、交集(求并、差、交集计算量大,可以选一个从库单独进行,或者将多个集合返回客户端,到客户端进行计算) 2. 集合数据排序

skye_fly的博客 3177

腾讯、飞书等在线表格自动化编辑--python

在线文档自动化处理数据

qq_32828053的博客 2万+

Redis的key和value大小限制

Redis的key和value大小限制 今天研究了下将java bean序列化到redis中存储起来,突然脑袋灵光一闪,对象大小会不会超过redis限制?不管怎么着,还是搞清楚一下比较好,所以就去问了下百度,果然没多人关心这个问题,所以决定还是去官网找吧。找到两句比较关键的话,截图如下。 结论 redis的key和string类型value限制均为512MB。

wangjinnan16的博客 11万+

stm32f407VET6 系统学习 day01 GPIO 配置

stm32f407VET6 系统学习 day01 GPIO 配置 LED 蜂鸣器 按键的不讲了,之前讲过了

she666666的博客 8890

【Reality Capture 】01:Reality Capture1.5中文版安装教程(附安装包下载)

本文详细介绍了Reality Capture 1.5中文版的安装步骤。首先,下载并解压Reality Capture v1.4.0汉化版安装包,运行EpicInstaller并更改安装路径。接着,启动Epic Games Launcher,登录或注册账号后下载并安装软件。安装完成后,进入主界面并设置中文语言。此外,还提供了中文补丁的拷贝方法,将ui.xml和RealityCapture_CHS.exe文件分别放置到指定目录,并运行RealityCapture_CHS.exe以完成汉化。最后,文章提供了Rea

智慧空间实验室 1728

redis规定集合长度_Redis 数据结构和对象系统,记住这 12 张图就够啦

专注于Java领域优质技术,欢迎关注来自:石杉的架构笔记Redis是一个开源的 key-value 存储系统,它使用六种底层数据结构构建了包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象的对象系统。今天我们就通过12张图来全面了解一下它的数据结构和对象系统的实现原理。本文的内容如下:首先介绍六种基础数据结构:动态字符串,链表,字典,跳跃表,整数集合和压缩列表。其次介绍 Redis 的对象...

weixin_39972519的博客 1185

在 SAP HANA 与 HANA Cloud 中,用 SQL DDL 创建数据库视图:从设计时工件到运行时对象的全链路实践

本文介绍了在SAP HANA中通过HDI容器使用DDL定义视图的方法。主要内容包括:1)采用.hdbview设计时工件存储视图定义,构建时自动转换为运行时视图,实现版本控制和权限隔离;2)开发前需准备HDI容器、MTA项目及配置.hdiconfig文件;3)详细说明.hdbview语法结构,重点讲解WITH READ ONLY和WITH STRUCTURED PRIVILEGE CHECK的使用场景;4)提供了从创建文件到构建验证的完整流程示例;5)强调跨容器访问时需通过.hdbgrants为#OO用户授予

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 254

【Redis】深入探索 Redis 的数据类型 —— 无序集合 Set

Set(集合)是 Redis 数据库中的一种数据类型,它是一种无序的、不重复的数据结构,用于存储一组唯一的元素。Set 在 Redis 中非常实用,因为它提供了高效的成员查找和去重功能,常用于处理一些需要存储唯一值的场景。特点和用途:无序性:Set 中的元素是无序排列的,与元素的插入顺序无关。唯一性:Set 中的元素是唯一的,不允许出现重复元素。高效的成员查找:Redis 提供了高效的成员查找操作,可以快速判断一个元素是否存在于集合中。去重。

qq_61635026的博客 5701

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【Redis】Set集合、Zset有序集合以及其它数据类型

set集合、zset有序集合以及其它类型

weixin_69380220的博客 1352

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Redis-redis常用数据类型set集合

文文x的博客 111

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

四.2 Redis 五大数据类型/结构的详细说明/详细使用( set 集合数据类型详解和使用)

在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。

weixin_61635597的博客 1692

Redis数据类型之(哈希Hash和集合Set)

Sinter:返回他们的交集。返回给定所有集合的交集SinsterStore:把他们交集返回并存储在destination 中。写的时候可以都小写,我只是为了看着清晰,才驼峰写法返回给定所有集合的交集并存储在 destination 中Sunion:返回他们的并集。返回所有给定集合的并集SunionStore:把他们并集返回并存储在destination 中。所有给定集合的并集存储在 destination 集合中Sdiff:返回他们的差集。

huanloveqiang的博客 3663

Redis入门十:Redis数据类型四:Set集合类型;Zset有序集合类型;Redis常用数据类型总结;

说明: (1)本篇博客主要内容是redis中的【Set集合类型】和【Zset有序集合类型】 (2)集合类型在实际项目中,使用的是比较少的(和Java有点类似,自己在做Java项目的时候,只是偶尔遇到需要去重的场景时,才会用到Java中的Set);所以,本篇博客的内容,基本了解就行; 目录 一:Set和Zset简介 二:Set 案例演示 三:Zset 案例演示 四:Redis常用数据类型总结; 一:Set和Zset简介 (1)Set集合中元素不可重复; (2)Zset集...

小枯林的博客 1598

Redis系列(五)、数据类型之无序集合Set

Redis 的 Set 是 string 类型的无序集合。常用于抽奖,打标签,共同好友等场景。 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232- 1 (4294967295, 每个集合可存储40多亿个成员)。

王义凯 的博客 1972

Redis常用数据类型——Redis列表(List)和Redis 集合(Set)

Redis常用数据类型,Redis列表(List),Redis集合(Set)

qq_47905231的博客 4530

Redis-五大数据类型-Set(集合)

与List类似是一个列表功能,但Set是自动排重的,当需要存储一个列表数据,又不希望出现重复数据时,Set是一个很好的选择。Set是String类型的无序集合,它底层其实是一个value为null的hash表,所以添加、删除、查找的时间复杂度都是O(1)。一般来说,一个算法如果是O(1),随着数据增加,查找数据的时间不变。集合中最大的成员数为232−12^{32}-1232−1( 每个集合超过40亿个元素)。

乐风的博客 699

redis基本数据类型(set集合)

redis基本数据类型(set集合)set集合存储类型常用操作命令sadd:添加元素到指定key的集合scard:获取集合元素的数量sdiff:返回一个集合与给定集合的差集的元素.sdiffstore:将一个集合与给定集合差集的元素存入另一个集合中sinter:获取指定集合的交集sinterstore:将指定集合的交集存入另一个集合sismember:判断集合中是否含有指定元素smembers:获取集合所有元素smove:从一个集合移动指定元素到另一个集合spop:随机从集合中移除指定个数的元素srandm

331

Redis 常用数据类型之 set(集合)

Redis 常用数据类型之 set(集合) set 集合特性 Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,在集合中不能出现重复的数据。 Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232- 1 (4294967295, 每个集合可存储40多亿个成员)。 set 常用命令 操作 命令 例子 说明 添加 .

Wayfreem的博客 662

Redis 数据类型 Set 集合

集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中元素之间是⽆序的并且元素不允许重复,如下图所⽰。⼀个集合中最多可以存储 2^32 - 1 个元素。Redis 除了⽀持集合内的增删查改操作,同时还⽀持多个集合取交集、并集、差集,合理地使⽤好集合类型,能在实际开发中解决很多问题。:集合中的元素是无序的,不能通过索引访问元素。:集合中的元素是唯一的,不允许重复。:集合内部使用哈希表实现,因此添加、删除和查找操作的时间复杂度接近于 O(1)。

2301_79881188的博客 895

Redis入门(五)Redis数据类型之集合类型set/zset

前言       本章讲解Redis数据类型之集合类型的set和特殊的有序集合类型zset 方法 1.概念 我们可以这样去理解,set就是string类型的无序集合,不允许重复。而zset是特殊的set,它是有序的。 2.set/zset常用命令 set 1)sadd/srem/spop/sdiff/sdiffstore/smembers 语法:sadd 集合 元素 作用:向指定...

jwang的博客 672
上一篇: Redis数据类型 - 列表List
下一篇: Redis数据类型 - 有序集合(Sorted set)
die_job
博客等级 码龄10年 136粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值