目录
2.1 SADD key member [member ...]
2.6 SREM key member [member ...]
2.9 SUNIONSTORE destination key [key ...]
2.11 SINTERSTORE destination key [key ...]
2.13 SDIFFSTORE destination key [key ...]
2.14 SMOVE source destination member
Redis 的 Set(集合)是一种无序的、不重复的数据结构。Set 类型非常适合用于存储唯一性元素,并且提供了多种集合操作,如交集、并集和差集等。Set 中的每个元素都是唯一的字符串,这使得 Set 成为实现“标签”、“唯一性检查”、“关系图”等场景的理想选择。
1 基本特性
- 无序:Set 中的元素是无序的,这意味着你不能通过索引来访问元素。
- 唯一性:Set 保证了所有元素都是唯一的,即同一个元素不会出现多次。
- 高效的操作:通过哈希表实现,添加、删除和成员检查操作的时间复杂度接近 O(1)。
- 支持集合运算:可以执行交集、并集、差集等集合运算。
2 主要操作命令
2.1 SADD key member [member ...]
向集合中添加一个或多个成员。如果成员已存在,则忽略该成员。
127.0.0.1:6379> sadd name java python java
(integer) 2
127.0.0.1:6379> smembers name
1) "java"
2) "python"
2.2 SMEMBERS key
返回集合中的所有成员。
127.0.0.1:6379> smembers name
1) "java"
2) "python"
2.3 SISMEMBER key member
检查指定成员是否存在于集合中,存在返回1,不存在返回0。
127.0.0.1:6379> sismember name python
(integer) 1
127.0.0.1:6379> sismember name python2
(integer) 0
2.4 SCARD key
返回集合中的成员数量。
127.0.0.1:6379> scard name
(integer) 2
2.5 SRANDMEMBER key [count]
随机返回集合中的一个或多个成员。如果指定了 count
,则返回指定数量的成员;如果 count
为负数,则允许重复返回。count为空时随机返回一个成员。
127.0.0.1:6379> smembers name
1) "go"
2) "java"
3) "c++"
4) "python"
127.0.0.1:6379> srandmember name 2
1) "java"
2) "go"
127.0.0.1:6379> srandmember name -3
1) "go"
2) "java"
3) "go"
127.0.0.1:6379> srandmember name
"python"
2.6 SREM key member [member ...]
从集合中移除一个或多个成员。
127.0.0.1:6379> smembers name
1) "go"
2) "java"
3) "c++"
4) "python"
127.0.0.1:6379> srem name c++
(integer) 1
127.0.0.1:6379> smembers name
1) "go"
2) "java"
3) "python"
2.7 SPOP key [count]
随机移除并返回集合中的一个或多个成员。如果指定了 count
,则移除并返回指定数量的成员。
127.0.0.1:6379> smembers name
1) "go"
2) "java"
3) "python"
127.0.0.1:6379> spop name 2
1) "python"
2) "go"
127.0.0.1:6379> smembers name
1) "java"
2.8 SUNION key [key ...]
返回给定集合之间的并集。
127.0.0.1:6379> smembers name
1) "java"
127.0.0.1:6379> smembers name1
1) "go"
127.0.0.1:6379> sunion name name1
1) "go"
2) "java"
2.9 SUNIONSTORE destination key [key ...]
将给定集合之间的并集存储到新的集合中。
127.0.0.1:6379> smembers name
1) "java"
127.0.0.1:6379> smembers name1
1) "go"
127.0.0.1:6379> sunionstore name2 name name1
(integer) 2
127.0.0.1:6379> smembers name2
1) "go"
2) "java"
2.10 SINTER key [key ...]
返回给定集合之间的交集。
127.0.0.1:6379> smembers name
1) "java"
2) "c++"
127.0.0.1:6379> smembers name1
1) "c++"
2) "python"
127.0.0.1:6379> sinter name name1
1) "c++"
2.11 SINTERSTORE destination key [key ...]
将给定集合之间的交集存储到新的集合中。
127.0.0.1:6379> smembers name
1) "java"
2) "c++"
127.0.0.1:6379> smembers name1
1) "c++"
2) "python"
127.0.0.1:6379> sinterstore name2 name name1
(integer) 1
127.0.0.1:6379> smembers name2
1) "c++"
2.12 SDIFF key [key ...]
返回第一个集合与其他集合的差集。
127.0.0.1:6379> smembers name
1) "java"
2) "c++"
127.0.0.1:6379> smembers name1
1) "c++"
2) "python"
127.0.0.1:6379> sdiff name name1
1) "java"
2.13 SDIFFSTORE destination key [key ...]
将第一个集合与其他集合的差集存储到新的集合中。
127.0.0.1:6379> smembers name
1) "java"
2) "c++"
127.0.0.1:6379> smembers name1
1) "c++"
2) "python"
127.0.0.1:6379> sdiffstore name2 name name1
(integer) 1
127.0.0.1:6379> smembers name2
1) "java"
2.14 SMOVE source destination member
将成员从一个集合移动到另一个集合。
127.0.0.1:6379> smembers name
1) "java"
2) "c++"
127.0.0.1:6379> smembers name2
1) "java"
127.0.0.1:6379> smove name name2 c++
(integer) 1
127.0.0.1:6379> smembers name2
1) "java"
2) "c++"
127.0.0.1:6379> smembers name
1) "java"
Set 数据类型在 Redis 中非常强大,它不仅提供了基本的增删查功能,还提供了强大的集合运算能力,适用于各种需要处理唯一性和集合逻辑的应用场景。
更多命令请参考:Commands | Docs