Redis 数据类型set(集合)

发布于:2024-10-13 ⋅ 阅读:(11) ⋅ 点赞:(0)

目录

1 基本特性

2 主要操作命令

2.1 SADD key member [member ...]

2.2 SMEMBERS key

2.3 SISMEMBER key member

2.4 SCARD key

2.5 SRANDMEMBER key [count]

2.6 SREM key member [member ...]

2.7 SPOP key [count]

2.8 SUNION key [key ...]

2.9 SUNIONSTORE destination key [key ...]

2.10 SINTER key [key ...]

2.11 SINTERSTORE destination key [key ...]

2.12 SDIFF 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