Redis Set 类型常用操作命令之从基础命令到实战应用

 更新时间:2025年08月25日 10:18:44   作者:Undoom  
本文将深入探讨Redis Set类型的常用操作命令,包括添加、删除、查询以及强大的交集、并集、差集运算,并结合实际应用场景,展示Set 在开发中的妙用,感兴趣的朋友一起看看吧

前言

在 Redis 的众多数据结构中,Set(集合)是一种非常有特色的类型。它与列表(List)类似,都可以存储多个字符串元素,但 Set 具有两个核心特性:元素的无序性元素的唯一性

  • 无序性意味着 Set 中的元素没有先后顺序,{a, b, c} 和 {c, a, b} 被认为是同一个集合。
  • 唯一性确保了每个元素在集合中只会出现一次,这使得 Set 成为实现数据去重、统计独立访客(UV)等场景的天然选择。

本文将深入探讨 Redis Set 类型的常用操作命令,包括添加、删除、查询以及强大的交集、并集、差集运算,并结合实际应用场景,展示 Set 在开发中的妙用。

1、集合中的元素是无序的
list[1,2,3]和[2,3,1]是两个不用的list
set[1,2,3]和[2,3,1]是一个集合

2、集合中的元素是不能重复的(元素都是唯一的)
集合可以用来进行去重

和list类似,集合中的每个类型,也都是string类型
可以使用JSON这样的格式让string也能存储

sadd、smembers、sismember

sadd:将一个或者多个元素添加到set中,注意,重复的元素无法添加到set中的
这里的个体元素叫做member
时间复杂度是O(1)

sadd key member [member ...]

返回值就是本次操作成功添加了几个元素

不能重复添加一个数

smembers:获取一个set中的所有元素,注意,元素之间的顺序是无序的

smembers key

sismember:判断一个元素在不在set中,在的话就返回1,不在的话就返回了0
时间复杂度O(1)

sismember key member

spop、srandmember

正常的pop是删除末尾元素的,我们这里是因为是集合中,无序的,所以spop是随机删除的
spop:从set中删除并返回一个或者多个元素,注意,由于set内的元素是无序的,所以取出的元素是随机的

这里的count是要删除几个元素,不写的话就是默认删除一个元素,写的话就是删除count个元素

spop key [count]

srandmember是从指定的集合中返回一个或者多个元素

srandmember key [count]

smove、srem

smove将一个元素从一个集合中取出并且放到另一个集合中去

smove source destination member

返回值1表示移动成功,0表示移动失败

将member从source上删除,然后插入到destination中

如果需要进行移动的元素不存在的话会返回0的

srem:将制定的元素从set中删除

srem key member [member...]

可以删除一个member,也可以一次删除多个member
返回值表示删除元素的元素个数

sinter、sinterstore

交集(inster)、并集(union)、差集(diff)

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

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

差集:a和b作差集就是找出那些元素在a中存在,在b中不存在的

sinter:获取给指定的一个集合或者是多个集合的交集

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

sinter key [key ...]

返回值就是交集的元素

sinterstore :获取指定的set的交集的元素并且保存到目标的set中

直接将算好的交集,放到destination这个key对应的集合中

sinterstore destination key [key ...]

返回值就是交集的元素个数
要想知道交集的内容的话,我们直接按照访问集合的方式访问destination这个Key即可

sunion、sunionstore、sdiff、sdiffstore

sunion:获取指定的set的并集中的元素

sunion key [key...]

返回值是并集的元素

sunionstore:获取指定元素的并集并且放到destination中

sunionstore destination key [key...]

sdiff:获取指定set的差集中的元素

sdiff key [key...]

sdiffstore:将指定set的差集中的元素获取到destination中

sdiffstore destination key [key...]

命令总结

命令时间复杂度
sadd key element [element …]O(k), k 是元素个数
srem key element [element …]O(k), k 是元素个数
scard keyO(1)
sismember key elementO(1)
srandmember key [count]O(n), n 是 count
spop key [count]O(n), n 是 count
smembers keyO(k), k 是元素个数
sinter key [key …] sitnerstoreO(m * k), k 是几个集合中元素最小的个数, m 是键个数
sunion key [key …] sunionstoreO(k), k 是多个集合的元素个数总和
sdiff key [key …] sdiffstoreO(k), k 是多个集合的元素个数总和

内部编码方式

set应用场景

1、使用set来保存用户的标签

2、set方便计算交集,很容易得找到两个用户之间的公共标签
使用set来计算用户之间的共同好友

3、使用set统计UV
去重

总结

通过本文的学习,我们全面了解了 Redis 的 Set 数据类型。回顾一下关键知识点:

  • 核心特性:Set 是一个无序且元素唯一的字符串集合。这一特性使其在需要去重和进行集合运算的场景中表现出色。
  • 基本操作:我们掌握了 sadd 添加、srem 删除、smembers 查看所有成员、sismember 判断成员是否存在等基础命令,其中大部分操作都具有 O(1) 的高效时间复杂度。
  • 集合运算:Set 最强大的功能之一是其高效的集合运算能力。通过 sinter (交集)、sunion (并集) 和 sdiff (差集) 命令,我们可以轻松实现复杂的数据分析和关联查询。
  • 应用场景:我们探讨了 Set 在实际开发中的应用,例如存储用户标签、计算共同好友/兴趣、以及利用其唯一性进行网站 UV 统计等。这些场景充分发挥了 Set 的优势。

总而言之,Redis Set 以其简洁的数据模型和强大的运算能力,为处理许多常见业务问题提供了高效且优雅的解决方案。

到此这篇关于Redis Set 类型详解:从基础命令到实战应用的文章就介绍到这了,更多相关Redis Set 类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis 中的热点键和数据倾斜示例详解

    Redis 中的热点键和数据倾斜示例详解

    热点键是指在 Redis 中被频繁访问的特定键,这些键由于其高访问频率,可能导致 Redis 服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis 中的热点键和数据倾斜,感兴趣的朋友一起看看吧
    2025-03-03
  • SpringBoot整合Mybatis-plus和Redis实现投票功能

    SpringBoot整合Mybatis-plus和Redis实现投票功能

    投票功能是一个非常常见的Web应用场景,这篇文章将为大家介绍一下如何将Redis和Mybatis-plus整合到SpringBoot中,实现投票功能,感兴趣的可以了解一下
    2023-05-05
  • RedisTemplate访问Redis的更好方法

    RedisTemplate访问Redis的更好方法

    这篇文章主要为大家介绍了RedisTemplate访问Redis的更好方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Redis Cluster 集群搭建你会吗

    Redis Cluster 集群搭建你会吗

    这篇文章主要介绍了Redis Cluster 集群搭建过程,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 利用Redis实现防止接口重复提交功能

    利用Redis实现防止接口重复提交功能

    大家好,本篇文章主要讲的是利用Redis实现防止接口重复提交功能,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Redis精确去重计数方法(咆哮位图)

    Redis精确去重计数方法(咆哮位图)

    这篇文章主要给大家介绍了关于Redis精确去重计数方法(咆哮位图)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • 利用Redis进行数据缓存的项目实践

    利用Redis进行数据缓存的项目实践

    在实际的业务场景中,Redis 一般和其他数据库搭配使用,用来减轻后端数据库的压力,本文就介绍了利用Redis进行数据缓存的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2022-06-06
  • Redis实现短信验证码登录的示例代码

    Redis实现短信验证码登录的示例代码

    本文主要介绍了基于Redis如何实现短信验证码登录功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 记录一次并发情况下的redis导致服务假死的问题解决

    记录一次并发情况下的redis导致服务假死的问题解决

    由于Redis需要依赖于操作系统环境,如果系统资源受限,比如过量的进程在挤占系统资源、系统死锁等情况,本文主要介绍了记录一次并发情况下的redis导致服务假死的问题解决,感兴趣的可以了解一下
    2023-09-09
  • CentOS 6.5 64位下安装Redis3.0.2的具体步骤

    CentOS 6.5 64位下安装Redis3.0.2的具体步骤

    这篇文章主要介绍了CentOS 6.5 64位下安装Redis3.0.2的具体步骤,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08

最新评论