news 2026/7/18 7:11:44

Redis---set类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis---set类型

SET的特点

1.集合中的元素时无序的,也就是说顺序是不重要的

举个例子:

1 2 3与1 3 2是一样的,没有任何区别的,反之有序就是有区别的

2.集合中的元素是不能重复的

3.和list一样value中的每个类型都是string类型,可以使用json/protobuf,让其也可以存储结构化数据

SADD

将其一个或多个元素添加到set中

操作格式:

sadd key member [member...]

返回值:

本次添加成功的元素个数

时间复杂度:

O(1)

举个例子:
sadd key1 1 2 3 4

SMEMBERS

查看当前集合中存在多少个元素

操作格式:

smembers key

时间复杂度:

O(N),N指的是集合中元素个数

SISMEMBER

判定某一个元素是否在集合中

操作格式:

sismember key member

返回值:

1表示存在,0表示不存在

时间复杂度:

O(1)

举个例子:

sismember key1 3

SPOP

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

操作格式:

spop key [count]

返回值:

删除的值

时间复杂度:

O(1)

举个例子:

spop key 3

随机的本质:

其实是在源码中,针对spop实现的时候采取了"生成随机数"的方式

SRANDMEMBER

随机返回一个或多个集合中的成员

操作格式:

srandmember key [count]

返回值:

拿到的值

时间复杂度:

O(1)

SMOVE

将一个元素从源set中取出并放入目标set中

操作格式:

smove source destination member

返回值:

1表示成功,0表示失败

时间复杂度:

O(1)

举个例子:

smove key1 key2 3

如果key1中存在两个1,分别先后两次将key1中的1向key2,会怎么样?

两次均会成功,也就是key1中的1会全部消失,但是key2中也只会存在一个1,因为set中的值是不可以重复的

SREM

将指定值从set中删除

操作格式:

srem key member [member...]

返回值:

成功删除元素的个数

时间复杂度:

O(1)

集合间操作

求交集,并集,差集

差集:

前者集合与后者集合相差的元素

举个例子:
A:1 2 3 4

B:3 4 5 6

A与B的差集:1 2

B与A的差集:5 6

SINTER

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

操作格式:

sinter key [key...]

返回值:

交集的元素

时间复杂度:

O(N*M),N是最小元素的个数,M是最大元素的个数

举个例子:

//求key1和key2的交集 sinter key1 key2

SINTERSTORE

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

操作格式:

sinterstore destination key [key...]

返回值:

交集元素的个数

时间复杂度:

O(N * M)

举个例子:

sinterstore key3 key1 key2

SUNION

获取set中的并集操作

操作格式:

sunion key [key...]

返回值:

并集的元素

时间复杂度:

O(N),N是所有集合的元素个数

举个例子:

sunion key1 key2

SUNIONSTORE destination key [key...]

把并集的结果储存进destination中,destination是目标集合

返回值:

并集的元素个数

时间复杂度:

O(N),N是所有集合的元素个数

sunionstore key3 key1 key2

SDIFF

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

操作格式:

sdiff key [key...]

返回值:

差集的元素

并集的元素

时间复杂度:

O(N),N是所有集合的元素个数

举个例子:

sdiff key1 key2

SDIFFSTORE

将差集的元素保存到目标集合当中

返回值:

返回值就是差集元素的个数

并集的元素

时间复杂度:

O(N),N是所有集合的元素个数

举个例子:

sdiffstore key3 key1 ky2

SET内部编码

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

intset(整数集合):当集合中的元素都是整数并且元素个数小于set-max-inset-entries配置,默认是512个,redis会选用intset来作为集合内部的实现,从而减少内存的使用

hashtable(哈希表):当集合类型无法满足intset的条件时,redis会使用hashtable作为集合的实现

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 7:10:20

街拍美女大合集,600G图集包免费领

本街拍资源汇集全网街拍图片,剔除重复与低质内容,最终形成这套全面、多样且高质量的【街拍美图大合集】。内容专注于街拍美女、时尚街拍、路人抓拍等热门类型,涵盖了各种风格、场景与季节的街拍图集,是寻找灵感、收藏欣赏的优质选…

作者头像 李华
网站建设 2026/7/18 7:09:26

国产AI编程工具五月洗牌:从免费尝鲜到工程级价值验证

1. 这场“限免倒计时”背后,不是营销噱头,而是国产AI编程工具的生存逻辑切换五月初,我收到通义灵码插件弹出的一条灰底白字提示:“免费额度将于5月31日24:00起调整,高级功能需订阅开通”。同一时间,几个技术…

作者头像 李华
网站建设 2026/7/18 7:09:21

戴森球计划工厂蓝图:新手快速上手指南与完整资源库

戴森球计划工厂蓝图:新手快速上手指南与完整资源库 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints是《戴森球计划》游戏中最全面的工厂蓝图开…

作者头像 李华
网站建设 2026/7/18 7:08:47

戴森球计划工厂蓝图终极指南:如何3天从新手变工厂大师

戴森球计划工厂蓝图终极指南:如何3天从新手变工厂大师 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 你是否曾在《戴森球计划》中面对复杂的工厂布局感到迷茫&…

作者头像 李华
网站建设 2026/7/18 7:08:00

3MHz高频开关充电器设计与NVDC架构解析

1. 2.5A/3MHz开关充电器方案设计背景在便携式电子设备井喷式发展的今天,锂电池供电系统面临着三大核心挑战:充电速度、热管理和系统兼容性。传统500kHz开关频率的充电方案在应对大容量电池时,暴露出充电时间长、转换效率低等明显短板。而3MHz…

作者头像 李华
网站建设 2026/7/18 7:02:50

Aval交互式视频格式:重新定义Web端动态内容体验的终极指南

Aval交互式视频格式:重新定义Web端动态内容体验的终极指南 【免费下载链接】aval A new open-source format for interactive video on the web, with a built-in state machine, frame-accurate transitions, and packed-alpha transparency. 项目地址: https://…

作者头像 李华