【Redis】Set类型的常用命令与应用场景

目录

1.命令小结

2.命令解析

3.编码方式与应用场景


1.命令小结

(1)set的特点

1)set中存放的数据也都是String类型

2)set集合中的元素是无须的

3)set集合中的元素是唯一的,不可重复

(2)命令大全

命令 含义 时间复杂度
sadd key element element ... 向set添加一个获多个元素 O(k),k 是元素个数
smembers key 获取集合的所有元素 O(k),k 是元素个数
sismember key element 判断一个元素是否在set中 O(1)
scard key 求集合中元素个数 O(1)
spop key count 随机删除并获取元素 O(n),n 是count
srandmember key count 随机获取元素 O(k),n 是count
smove sourse destination member 将元素从一个集合中移到另一个集合 O(n),n 是count
srem key member member ... 移除指定元素 O(N)
sinter key1 key2 ... 求交集 O(m * k),k是几个集合中元素最小的个数,m是键个数
sinterstore destination key1 key2 ... 求交集并放入指定集合中 O(m * k),k是几个集合中元素最小的个数,m是键个数
sunion key1 key2 ... 求并集 O(k),k是多个集合的元素个数总和
sunionstore destination key1 key2 ... 求并集并放入指定集合中 O(k),k是多个集合的元素个数总和
sdiff key1 key2 ... 求差集 O(k),k是多个集合的元素个数总和
sdffstore destination key1 key2 ... 求差集并放入指定集合中 O(k),k 是多个集合的元素个数总和
2.命令解析

(1)sadd

1)语法:sadd key member member ...

2)含义:将一个或者多个元素添加到key对应的set集合中。重复元素无法添加进去

3)返回值:本次添加成功的元素个数

4)时间复杂度:O(1)

(2)smembers

1)语法:smembers key

2)含义:获取key对应的set集合列表

3)返回值:返回set中的所有元素,顺序随机

4)时间复杂度:O(N),N为元素个数

(3)sismember

1)语法:sismember key member

2)含义:判断一个元素是否存在key对应的set中

3)返回值:1表示存在,0表示key或者member不存在

4)时间复杂度:O(1)

(4)scard

1)语法:scard key

2)含义:获取key对应集合中的元素个数

3)返回值:返回set中的元素个数

4)时间复杂度:O(1)

(5)spop

1)语法:spop key count

2)含义:随机删除set中的元素,不写count默认删除一个;指定count则随机删除count个

3)返回值:删除的元素

4)时间复杂度:O(N),N是count

(6)srandmember

1)语法:srandmember key count

2)含义:随机从key对应的set集合中取出一个或者count个元素

3)返回值:返回取出的元素

4)时间复杂度:O(N),N是count

(7)smove

1)语法:smove source destination member

2)含义:将member元素从source对应的集合中取出放入destination中

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

4)时间复杂度:O(1)

(8)srem

1)语法:srem key member member ...

2)含义:将指定元素从key对应的集合中移除

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

4)时间复杂度:O(N),N为删除的个数

(9)并集、交集、差集概念

1)交集:两个集合求并集,结果为两个集合中都存在的元素

2)并集:两个集合求交集,结果为两个集合的所有元素相加,并去掉重复的元素,只留下一份

3)差集:A和B求差集,A在前面,则返回A中存在,但B中不存在的元素;B和A求差集,B在前面,则返回在B中存在,但A中不存在的元素

下面三个命令都是和上述概念相关的,也是set集合的特点所在

(10)sinter与sinterstore

  • sinter

1)语法:sinter key1 key2 ...

2)含义:获取指定集合的交集(可以一个或者多个集合)

3)返回值:交集的元素

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

  • sinterstore

1)语法:sinterstore destination key1 key2 ...

2)含义:获取到的交集元素存放到destination集合中

3)返回值:交集的元素

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

(11)sunion与sunion

  • sunion

1)语法:sunion key1 key2 ...

2)含义:获取给定set的并集中的元素

3)返回值:并集的元素

4)时间复杂度:O(N),N给定的所有集合的总的元素个数

  • sunionstore

1)语法:sunionstore destination key key ...

2)含义:获取给定set的并集中的元素并且保存到目标set中

3)返回值:并集的元素个数

4)时间复杂度:O(N),N给定的所有集合的总的元素个数

(12)sdiff与sdiffstore

  • sdiff

1)语法:sdiff key key ...

2)含义:获取给定set的差集中的元素

3)返回值:差集的元素

4)时间复杂度:O(N),N是给定的所有集合的总的元素个数

  • sdiffstore

1)语法:sdiffstore destination key key ...

2)含义:获取给定set的差集中的元素并且保存到目标set中

3)返回值:差集的元素个数

4)时间复杂度:O(N),N是给定的所有集合的总的元素个数

3.编码方式与应用场景

(1)编码方式

set内部主要有两种编码方式,分别是intset(整数集合)和hashtable(哈希表)

  • intset

当set集合中的元素都为整数时,编码方式为intset,可以减少内存的使用

  • hashtable

不是intset时,编码方式就为hashtable

(2)应用场景1---保存用户标签

这方面也就是用set来保存用户的特征,从而分析出"用户画像",进而更方便给用户推荐相应的产品。

(3)应用场景2---计算用户之间的公共好友

利用set中元素的唯一性,多个集合之间求并集,就能推算出用户之间的公共好友。

(4)应用场景3---统计UV

UV也就是用户访问服务器后产生的痕迹,痕迹+1,同一个用户多次访问同一个服务器不会使UV增加

相关推荐
adinnet202628 分钟前
预算管控:预算执行与偏差问数
大数据·数据库
旋生万物2 小时前
Redis 缓存雪崩?不是 TTL 一样,是过期相位同步塌陷(附打散脚本)
redis·缓存·aigc·螺旋生成论·螺旋相位
Omics Pro2 小时前
Cell封面|衰老生物学开源AI工具包
数据库·人工智能·算法·机器学习·自然语言处理
夕除3 小时前
redis--020
redis
Wx-bishekaifayuan4 小时前
springboot生活商城系统21035-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·golang·课程设计
卓怡学长4 小时前
w206基于SpringBoot的社区团购小程序设计与实现
java·spring boot·spring·intellij-idea
IT枫斗者枫哥10 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
知守观10 小时前
@Transactional 事务失效排查,try-catch 吞异常导致回滚失败(附源码分析)
后端·spring
Y0010 小时前
PostgreSQL 的锁:为什么你的 ALTER TABLE 会卡住,以及怎么查
数据库·postgresql
不好听61310 小时前
缓存三大坑:穿透·击穿·雪崩一次讲透
redis