Redis Sets 简介:SADD、SREM、SMEMBERS
Redis 集合是一种基础数据结构,可用于存储一组唯一且无序的元素。了解如何管理集合对于各种应用至关重要,从跟踪唯一访客到管理用户权限。本课将全面介绍 Redis 集合,重点介绍核心命令 SADD
、 SREM
和 SMEMBERS
。我们将探讨它们的功能、用例和实际示例,帮助您掌握在 Redis 项目中有效使用集合的知识。
了解 Redis 集合
Redis 集合是字符串的集合,其中每个字符串在集合内都是唯一的。与列表不同,集合不维护元素的任何特定顺序。这一特性使其成为需要确保唯一性并执行基于集合的运算(例如并集、交集和差集,我们将在下一章节中介绍)的场景的理想选择。
Redis Sets 的主要特点:
- 唯一性: 集合中的每个元素都必须唯一。首次添加后,多次添加同一元素将不会产生任何影响。
- 无序: 集合中的元素不按任何特定顺序存储。添加元素的顺序不会被保留。
- 基于字符串: 集合只能包含字符串元素。
- 高效的成员资格测试: Redis 集合针对检查集合中是否存在元素进行了高度优化。
Redis Set 的用例:
- 跟踪独立访客: 您可以使用集合来存储网站或应用程序的独立访客 ID。每当有新访客访问时,您都会将其 ID 添加到集合中。集合的大小代表独立访客的数量。
- 管理用户权限: 可以使用集合来表示分配给用户的权限。每个权限都可以作为字符串存储在集合中。
- 社交网络: 集合可用于表示社交网络中的关注者和关注者关系。每个用户可以拥有一组关注者和一组他们正在关注的用户。
- 推荐系统: 集合可用于存储用户交互过的商品。这些信息随后可用于生成类似商品的推荐。
核心集命令:SADD、SREM、SMEMBERS
让我们深入研究使用 Redis 集的三个基本命令: SADD
、 SREM
和 SMEMBERS
。
SADD:向集合添加元素
SADD
命令用于向集合添加一个或多个成员。如果集合不存在,则会自动创建。如果集合中已存在成员,则不会再次添加。
句法:
SADD key member [member ...]
key
:要添加成员的集合的名称。member
:要添加到集合的成员。您可以在一个命令中添加多个成员。
返回值:
SADD
命令返回_成功_添加到集合的成员数(不包括已经存在的成员)。
例子:
SADD my_set "apple"
SADD my_set "banana" "cherry"
SADD my_set "apple" "date" // "apple" will not be added again
在此示例中:
SADD my_set "apple"
将“apple”添加到集合my_set
中。该命令返回1
因为添加了一个元素。SADD my_set "banana" "cherry"
将“banana”和“cherry”添加到my_set
中。该命令返回2
,因为添加了两个元素。SADD my_set "apple" "date"
尝试添加 “apple” 和 “date”。由于 “apple” 已存在于集合中,因此仅添加 “date”。该命令返回1
。
SREM:从集合中删除元素
SREM
命令用于从集合中删除一个或多个成员。如果指定的键不存在,则将其视为空集,并且该命令返回 0
。如果集合中不存在某个成员,则直接忽略该成员。
句法:
SREM key member [member ...]
key
:要从中删除成员的集合的名称。member
:要从集合中移除的成员。您可以使用单个命令移除多个成员。
返回值:
SREM
命令返回_成功_从集合中删除的成员数。
例子:
SADD my_set "apple" "banana" "cherry"
SREM my_set "banana"
SREM my_set "date" "cherry" // "date" does not exist, "cherry" is removed
在此示例中:
SADD my_set "apple" "banana" "cherry"
使用三个元素填充集合my_set
。SREM my_set "banana"
从集合中删除“banana”。该命令返回1
。SREM my_set "date" "cherry"
尝试删除“date”和“cherry”。由于“date”不在集合中,因此会被忽略。“cherry”被删除。该命令返回1
。
SMEMBERS:检索集合的所有成员
SMEMBERS
命令返回集合中的所有成员。返回成员的顺序不保证。
句法:
SMEMBERS key
key
:您要从中检索成员的集合的名称。
返回值:
SMEMBERS
命令返回集合中所有成员的列表。如果集合不存在,则返回空列表。
例子:
SADD my_set "apple" "banana" "cherry"
SMEMBERS my_set
SMEMBERS my_set
命令将返回一个包含“apple”、“banana”和“cherry”(无特定顺序)的列表。
实际示例和演示
让我们探讨一些实际的例子来巩固您对 SADD
、 SREM
和 SMEMBERS
的理解。
示例 1:跟踪唯一网站访问者
假设您正在构建一个网站,并希望跟踪每天的独立访客数量。您可以使用 Redis 集合来存储访客的用户 ID。
// Assuming you have a user ID for each visitor
SADD unique_visitors_20240127 user123
SADD unique_visitors_20240127 user456
SADD unique_visitors_20240127 user123 // Duplicate visitor - not added again
// To get the number of unique visitors:
SCARD unique_visitors_20240127 // (This command will be covered in the next lesson)
// To see who visited:
SMEMBERS unique_visitors_20240127
在此示例中, unique_visitors_20240127
是表示 2024 年 1 月 27 日唯一访客集合的键。SADD SADD
会将新的访客 ID 添加到集合中。重复的访客“user123”不会被再次添加。SCARD( SMEMBERS
将在下一章节中介绍)将返回集合的 SCARD
(元素数量),从而得出唯一访客的数量。SMEMBERS 将显示用户 ID 列表。
示例 2:管理用户角色
假设您的应用程序包含不同的用户角色(例如“管理员”、“编辑者”、“查看者”)。您可以使用集合来管理分配给每个用户的角色。
SADD user:123:roles "editor"
SADD user:123:roles "viewer"
// To remove the "viewer" role:
SREM user:123:roles "viewer"
// To see what roles user 123 has:
SMEMBERS user:123:roles
这里, user:123:roles
是表示 ID 为 123 的用户的角色集的键。SADD 将角色添加到集合中, SADD
SREM
角色, SMEMBERS
检索当前角色。
示例 3:实现简单的“点赞”系统
考虑这样一种场景:用户可以“点赞”帖子。您可以使用一个集合来存储点赞特定帖子的用户 ID。
SADD post:456:likes user123
SADD post:456:likes user789
SADD post:456:likes user123 // User 123 likes again - no effect
// To unlike:
SREM post:456:likes user123
// To see who liked post 456:
SMEMBERS post:456:likes
在这种情况下, post:456:likes
代表喜欢 ID 为 456 的帖子的用户集。当用户喜欢该帖子时, SADD
会将用户添加到集合中,当用户不喜欢时, SREM
会将他们删除,而 SMEMBERS
会检索喜欢该帖子的用户列表。