文章目录
简介
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"