Redis数据类型之Set类型

简介

Redis的set是String类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据,Redis中的集合是通过哈希表实现的,set是通过hashTable实现的。

集合中的最大成员数为2的32次方-1(每个集合可以存储40多亿个元素),类似于java中的hashTable集合。

set(集合)的内部结构

Redis的set(集合)相当于Java语言里的HashSet,它内部的键值对是无序的、唯一的。它的内部实现了一个所有value为null的特殊字典。
集合中的最后一个元素被移除之后,数据结构被自动删除,内存被回收。
在这里插入图片描述

赋值语法

SADD添加元素

向集合中添加一个或多个成员。

SADD key value [value2]
127.0.0.1:6379> sadd set01 1 1 2 2 3 3
(integer) 3
127.0.0.1:6379>  smembers set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6379>

SMEMBERS 返回集合中所有成员

返回集合中的所有成员

SMEMBERS key
127.0.0.1:6379> sadd set01 1 1 2 2 3 3
(integer) 3
127.0.0.1:6379>  smembers set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6379>

SCARD 获得集合的成员数

获取集合的成员数

SCARD key
127.0.0.1:6379>  smembers set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> scard set01
(integer) 3
127.0.0.1:6379>

SISMEMBER 判断元素是否存在

判断member元素是不是集合key中的成员(开发中:验证是否存在判断),如果存在则返回1。

SISMEMBER key member 
127.0.0.1:6379> smembers set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> sismember set01 1
(integer) 1
127.0.0.1:6379> sismember set01 4
(integer) 0
127.0.0.1:6379>

SRANDMEMBER 返回集合中一个或者多个随机数

返回集合中一个或者多个随机数

SRANDMEMBER key [count] 
127.0.0.1:6379> smembers set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> srandmember set01 2
1) "3"
2) "1"

删除语法

SREM 移除集合中的元素

移除集合一个或者多个元素

SREM key member [member] 
127.0.0.1:6379> smembers set01
1) "1"
2) "2"
3) "3"
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> srem set01 1
(integer) 1
127.0.0.1:6379> smembers set01
1) "2"
2) "3"

SPOP 移除并返回集合中的一个随机元素

移除并返回集合中的一个随机元素

SPOP key [count] 
127.0.0.1:6379> smembers set01
1) "1"
2) "2"
3) "3"
4) "5"
5) "7"
6) "9"
127.0.0.1:6379> spop set01
"1"
127.0.0.1:6379> spop set01
"9"
127.0.0.1:6379> smembers set01
1) "2"
2) "3"
3) "5"
4) "7"
127.0.0.1:6379> spop set01 2
1) "3"
2) "7"

SMOVE 移除元素到另外一个集合

将member元素从source集合移到destination集合

SMOVE source destination member 
127.0.0.1:6379> smembers set02
(empty list or set)
127.0.0.1:6379> smembers set01
1) "2"
2) "5"
127.0.0.1:6379> smove set01 set02 2
(integer) 1
127.0.0.1:6379> smembers set02
1) "2"

差集语法

记A,B是两个集合,则所有属于A且不属于B的元素构成的集合,叫做集合A减集合B(或集合A与集合B之差),类似地,对于集合A、B,把集合{x∣x∈A,且x∉B}叫做A与B的差集。

SDIFF 返回给定所有集合的差集(左侧)

返回给定所有集合的差集(左侧也就是第一个key1 )

SDIFF key1 key2
127.0.0.1:6379> sadd s1 1 2 3 a b c
(integer) 6
127.0.0.1:6379> sadd s2 4 5 6 a b c
(integer) 6
127.0.0.1:6379> smembers s1
1) "3"
2) "1"
3) "a"
4) "2"
5) "c"
6) "b"
127.0.0.1:6379> smembers s2
1) "4"
2) "c"
3) "b"
4) "5"
5) "6"
6) "a"
127.0.0.1:6379> sdiff s1 s2
1) "1"
2) "2"
3) "3"

SDIFFSTORE 存储差集的集合

返回给定所有集合的差集并存储在destination中

127.0.0.1:6379> sdiffstore s3 s1 s2
(integer) 3
127.0.0.1:6379> smembers s3
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> sdiffstore s3 s2 s1
(integer) 3
127.0.0.1:6379> smembers s3
1) "4"
2) "5"
3) "6"

交集语法

记A,B是两个集合,以属于A且属于B的元素为元素的集合称为A与B的交(集),记作A∩B(或B∩A),读作“A交B”(或“B交A”),即A∩B={x|x∈A,且x∈B}

SINTER 返回给定所有集合的交集(共享数据)

返回给定所有集合的交集(共享数据)

SINTER key1 key2 
127.0.0.1:6379> smembers s1
1) "3"
2) "1"
3) "a"
4) "2"
5) "c"
6) "b"
127.0.0.1:6379> smembers s2
1) "4"
2) "c"
3) "b"
4) "5"
5) "6"
6) "a"
127.0.0.1:6379> sinter s1 s2
1) "c"
2) "b"
3) "a"

SINTERSTORE存储交集的集合

返回给定所有集合的交集并存储到destination集合中
并集语法

SINTERSTORE destination key1 key2
127.0.0.1:6379> sinterstore s4 s1 s2
(integer) 3
127.0.0.1:6379> smembers s4
1) "c"
2) "b"
3) "a"

并集语法

记A,B是两个集合,以属于A或属于B的元素为元素的集合称为A与B的并(集),记作A∪B(或B∪A),读作“A并B”(或“B并A”),即A∪B={x|x∈A,或x∈B} 。

SUNION 返回给定所有集合的并集

返回给定所有集合的并集

SUNION key1 key2
127.0.0.1:6379> sunion s1 s2
1) "1"
2) "3"
3) "c"
4) "b"
5) "5"
6) "a"
7) "2"
8) "6"
9) "4"

SUNIONSTORE存储交集的集合

返回给定所有集合的并集并存储到destination集合中

SUNIONSTORE destination key1 key2
127.0.0.1:6379> smembers s3
1) "1"
2) "3"
3) "c"
4) "b"
5) "5"
6) "a"
7) "2"
8) "6"
9) "4"

应用场景

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值