redis -Set

一 ,Set(集合)介绍

复制代码
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

二 set结合命令

复制代码
SADD key member1[member2..]    向集合中无序增加一个/多个成员
SCARD key    获取集合的成员数
SMEMBERS key    返回集合中所有的成员
SISMEMBER key member    查询member元素是否是集合的成员,结果是无序的
SRANDMEMBER key [count]    随机返回集合中count个成员,count缺省值为1
SPOP key [count]    随机移除并返回集合中count个成员,count缺省值为1
SMOVE source destination member    将source集合的成员member移动到destination集合
SREM key member1[member2..]    移除集合中一个/多个成员
SDIFF key1[key2..]    返回所有集合的差集 key1- key2 - ...
SDIFFSTORE destination key1[key2..]    在SDIFF的基础上,将结果保存到集合中==(覆盖)==。不能保存到其他类型key噢!
SINTER key1 [key2..]    返回所有集合的交集
SINTERSTORE destination key1[key2..]    在SINTER的基础上,存储结果到集合中。覆盖
SUNION key1 [key2..]    返回所有集合的并集
SUNIONSTORE destination key1 [key2..]    在SUNION的基础上,存储结果到及和张。覆盖
SSCAN KEY [MATCH pattern] [COUNT count]    在大量数据环境下,使用此命令遍历集合中元素,每次遍历部分

三 案例

bash 复制代码
---------------SADD--SCARD--SMEMBERS--SISMEMBER--------------------

127.0.0.1:6379> SADD myset m1 m2 m3 m4 # 向myset中增加成员 m1~m4
(integer) 4
127.0.0.1:6379> SCARD myset # 获取集合的成员数目
(integer) 4
127.0.0.1:6379> smembers myset # 获取集合中所有成员
1) "m4"
2) "m3"
3) "m2"
4) "m1"
127.0.0.1:6379> SISMEMBER myset m5 # 查询m5是否是myset的成员
(integer) 0 # 不是,返回0
127.0.0.1:6379> SISMEMBER myset m2
(integer) 1 # 是,返回1
127.0.0.1:6379> SISMEMBER myset m3
(integer) 1

---------------------SRANDMEMBER--SPOP----------------------------------

127.0.0.1:6379> SRANDMEMBER myset 3 # 随机返回3个成员
1) "m2"
2) "m3"
3) "m4"
127.0.0.1:6379> SRANDMEMBER myset # 随机返回1个成员
"m3"
127.0.0.1:6379> SPOP myset 2 # 随机移除并返回2个成员
1) "m1"
2) "m4"
# 将set还原到{m1,m2,m3,m4}

---------------------SMOVE--SREM----------------------------------------

127.0.0.1:6379> SMOVE myset newset m3 # 将myset中m3成员移动到newset集合
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "m4"
2) "m2"
3) "m1"
127.0.0.1:6379> SMEMBERS newset
1) "m3"
127.0.0.1:6379> SREM newset m3 # 从newset中移除m3元素
(integer) 1
127.0.0.1:6379> SMEMBERS newset
(empty list or set)

# 下面开始是多集合操作,多集合操作中若只有一个参数默认和自身进行运算
# setx=>{m1,m2,m4,m6}, sety=>{m2,m5,m6}, setz=>{m1,m3,m6}

-----------------------------SDIFF------------------------------------

127.0.0.1:6379> SDIFF setx sety setz # 等价于setx-sety-setz
1) "m4"
127.0.0.1:6379> SDIFF setx sety # setx - sety
1) "m4"
2) "m1"
127.0.0.1:6379> SDIFF sety setx # sety - setx
1) "m5"


-------------------------SINTER---------------------------------------
# 共同关注(交集)

127.0.0.1:6379> SINTER setx sety setz # 求 setx、sety、setx的交集
1) "m6"
127.0.0.1:6379> SINTER setx sety # 求setx sety的交集
1) "m2"
2) "m6"

-------------------------SUNION---------------------------------------

127.0.0.1:6379> SUNION setx sety setz # setx sety setz的并集
1) "m4"
2) "m6"
3) "m3"
4) "m2"
5) "m1"
6) "m5"
127.0.0.1:6379> SUNION setx sety # setx sety 并集
1) "m4"
2) "m6"
3) "m2"
4) "m1"
5) "m5"
相关推荐
cfm_29142 分钟前
Spring监听器
java·spring boot·后端
cfm_29146 分钟前
SpringBoot 数据库全栈整合
数据库·spring boot·后端
SamDeepThinking10 分钟前
Java面向对象在JVM里怎么实现
java·后端·面试
浅止菌11 分钟前
嵌入式项目Makefile越写越乱?一张万能模板+5个技巧,告别重复劳动
linux
是上好佳佳佳呀15 分钟前
MySQL 基础:从数据库概念到表结构管理DDL
数据库·mysql
Nturmoils17 分钟前
Oracle 迁移评估时,我把这两类问题列在了检查清单最前面
数据库
Database_Cool_28 分钟前
数据库性能不够用,升级到什么方案好?阿里云 PolarDB(云原生数据库领导者,兼容 MySQL/PostgreSQL/Oracle)平滑升级与百倍弹性
数据库·阿里云·云原生
程序猿秃头之路32 分钟前
DDD 系列:聚合和聚合根详解
数据库·oracle·ddd·领域驱动设计
chatexcel1 小时前
不用写 SQL,如何用AI直连数据库生成可刷新的数据看板?ChatExcel的一种实践
大数据·数据库·人工智能·sql·数据分析·excel
咸鱼翻身小阿橙1 小时前
多线程解析
java·开发语言