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

Redis数据结构——set

目录

set命令

sadd

smembers

sismember

spop

srandmember

smove

srem

集合间操作

sinter

sinterstore

sunion

sunionstore

sdiff

命令总结 

内部编码


set是集合的意思,集合就是把一些有关的数据放到一起。

集合有以下这样的特性:

1、集合中的元素是无序的,顺序交换一下还是同一个集合

2、集合中的元素是不能重复的(唯一的)

3、和list类似,集合中存储的元素都是string类型,可以使用json这样的格式存储结构化数据

set命令

sadd

往集合里面添加一个或者多个元素。

语法:

sadd key member[member ...]

我们把集合中的元素叫做member 。

返回值是成功添加了几个元素。

由于set是不能存储相同元素的,因此不能保证添加的元素就能被成功添加。

我们已经添加了1、2、3、4,再次添加就会返回0,一个都没有被成功添加,因为它们都重复了。

smembers

获取到集合中的所有元素,元素间的顺序是无所谓的。

语法:

smembers key

1、2、3、4就出来了。

sismember

判断元素是否在集合中。  

语法:

sismember key member 

spop

从"末尾"删除一个元素,集合中的元素是无序的,此时那个元素是"末尾"?使用spop删除元素的时候其实是随机删除。

语法:

spop key [count]

count不写的时候就随机删一个,写了的话就随机删除count个。

我们可以看到删除的顺序并不是我们添加的顺序。

返回值:删除的元素

srandmember

随机获取一个元素,并不会删除。

语法:

srandmember key

smove

将一个元素从源set中取出存到目的set中。大白话就是从一个set删除,在插入到另外一个set

语法:

smove source destination member

我们创建两个集合key1和key2,key1里面添加1、2、3、4元素,key2添加5、6、7、8元素,然后使用smove操作将key1里面的1删除插入到key2中。

如果此时我们在往key1里面插入一个1,再把1删除插入到key2中会发生什么呢?

此时并不会发生报错,此时会把源set中的member删除,目的set保持不变。

如果源set中就没有member,此时使用smove会怎么样?

key1中没有9,自然就会返回0,表示失败。

返回值:1表示成功,0表示失败。

srem

删除元素,可以一次删除一个元素,也可以一次删除多个元素。

语法:

srem key member [member...]

 

返回值:删除成功的元素个数

集合间操作

既然是集合,肯定要有求交集、并集、差集的操作吧。

交集:最终结果同时出现在两个集合。

比如现在有集合A:1、2、3、4,集合B:3、4、5、6。A和B的交集就是3、4.

并集:把多个集合中的数据都集中放在一起,如果元素有重复,最终只保留一份。

还是拿上面的集合A、B来看,A和B的并集是1、2、3、4、5、6。

差集:A和B做差集就是,找出那些在A中存在,在B中不存在的元素。

A和B的差集就是1、2。

交集和并集是符合交换律的,但是差集就不同了A和B的差集和B和A的差集是不同的。

sinter

求交集。

语法:

sinter key [key...]

此处每个key都对应一个集合,返回值就是最终交集的数据。

时间复杂度是O(N * M),N是最小的集合元素个数,M是最大的集合元素个数。

sinterstore

这个命令同样也是求交集的。

语法:

sinterstore destination key [key ...] 

该命令是直接把算好的交集,放到destination中了 。

返回值:交集的元素个数。

要想知道交集的内容,直接smembers destination即可。

sunion

求并集。

语法:

sunion key [key...]

 返回的是并集的结果数据。

时间复杂度:O(N),N是所有元素加在一起。

sunionstore

它和sinter一样,也提供了一个存储版本,直接把并集的结果存储到destination对应的集合中。

语法:

sunionstore destination key [key ...]

返回值:并集的元素个数

时间复杂度:O(N)

sdiff

求差集。

语法:

sdiff key [key...]

返回值:差集的结果。

时间复杂度:O(N),给定集合的总个数。

sdiffstore

将差集结果保存到key中。

语法:

sdiffstore destination [key ...]

返回值:差集的元素个数

下面可以看到key1和key2求差集和key2和key1求差集是不同的。

命令总结 

命令功能
sadd key element [element...]添加元素
srem key element [element...]删除元素
sismember key element 判断元素是否在集合中
srandmember key [count]随机返回一个元素
scard key(太简单就没演示)返回集合长度
spop key [count]尾删
smembers key获取集合所有元素
sinter key [key...] sinterstore求交集
sunion key [key...] sunionstore求并集
sdiff key [key ...] sdiffstore求差集

内部编码

intset(整数集合):为了节省空间做出的特定优化,当元素均为整数,并且元素个数不是很多的时候。

hashtable(哈希表)

key是整数的时候用的是intset,当我们插入了一个字符串后,就变成哈希表了。

相关文章:

  • C语言(队列)
  • 算法.习题篇
  • 论文阅读_大型语言模型个性化劝说的黑暗模式
  • 第一个Hadoop程序
  • C++ 二叉搜索树代码
  • Windows 远程桌面多端口访问,局域网虚拟IP映射多个Windows 主机解决方案
  • 【算法】矩阵置零
  • leetcode-数组
  • 【C++】类和对象(1)
  • 【GPT入门】第9课 思维树概念与原理
  • RocketMQ延迟消息深度解析:原理、实践与性能调优
  • 第11章 web应用程序安全(网络安全防御实战--蓝军武器库)
  • 第二章:go 注意事项(各个平台编译方式)
  • Fiddler抓取App接口-Andriod/IOS配置方法
  • JS基础之对象
  • 使用 vxe-table 导出 excel,支持带数值、货币、图片等带格式导出
  • SQL Server核心知识总结
  • STM32项目分享:智能家居语音系统(ASRPRO版)
  • 创建Electron35 + vue3 + electron-builder项目,有很过坑,记录过程
  • 基于JavaScript的PDF翻译、PDF文档解析系统开发实践,二次开发可商业化,目前包含PDF加载、放大、缩小、翻译、旋转、创建等功能
  • quiz在哪个网站做/专业做网站公司
  • 广东品牌网站建设多少钱/图片扫一扫在线识别照片
  • 公众号里的功能怎么开发/网站优化seo方案
  • 通信建设网站/爱战网关键词查询网站
  • 有原型怎么做网站/品牌营销策划
  • 最低价做网站/深圳十大教育培训机构排名