redis数据结构-07(SADD、SREM、SMEMBERS)

发布于:2025-05-12 ⋅ 阅读:(14) ⋅ 点赞:(0)

Redis Sets 简介:SADD、SREM、SMEMBERS

Redis 集合是一种基础数据结构,可用于存储一组唯一且无序的元素。了解如何管理集合对于各种应用至关重要,从跟踪唯一访客到管理用户权限。本课将全面介绍 Redis 集合,重点介绍核心命令 SADDSREMSMEMBERS 。我们将探讨它们的功能、用例和实际示例,帮助您掌握在 Redis 项目中有效使用集合的知识。

了解 Redis 集合

Redis 集合是字符串的集合,其中每个字符串在集合内都是唯一的。与列表不同,集合不维护元素的任何特定顺序。这一特性使其成为需要确保唯一性并执行基于集合的运算(例如并集、交集和差集,我们将在下一章节中介绍)的场景的理想选择。

Redis Sets 的主要特点:

  • 唯一性: 集合中的每个元素都必须唯一。首次添加后,多次添加同一元素将不会产生任何影响。
  • 无序: 集合中的元素不按任何特定顺序存储。添加元素的顺序不会被保留。
  • 基于字符串: 集合只能包含字符串元素。
  • 高效的成员资格测试: Redis 集合针对检查集合中是否存在元素进行了高度优化。

Redis Set 的用例:

  • 跟踪独立访客: 您可以使用集合来存储网站或应用程序的独立访客 ID。每当有新访客访问时,您都会将其 ID 添加到集合中。集合的大小代表独立访客的​​数量。
  • 管理用户权限: 可以使用集合来表示分配给用户的权限。每个权限都可以作为字符串存储在集合中。
  • 社交网络: 集合可用于表示社交网络中的关注者和关注者关系。每个用户可以拥有一组关注者和一组他们正在关注的用户。
  • 推荐系统: 集合可用于存储用户交互过的商品。这些信息随后可用于生成类似商品的推荐。

核心集命令:SADD、SREM、SMEMBERS

让我们深入研究使用 Redis 集的三个基本命令: SADDSREMSMEMBERS

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

在此示例中:

  1. SADD my_set "apple" 将“apple”添加到集合 my_set 中。该命令返回 1 因为添加了一个元素。
  2. SADD my_set "banana" "cherry" 将“banana”和“cherry”添加到 my_set 中。该命令返回 2 ,因为添加了两个元素。
  3. 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

在此示例中:

  1. SADD my_set "apple" "banana" "cherry" 使用三个元素填充集合 my_set
  2. SREM my_set "banana" 从集合中删除“banana”。该命令返回 1
  3. 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”(无特定顺序)的列表。

实际示例和演示

让我们探讨一些实际的例子来巩固您对 SADDSREMSMEMBERS 的理解。

示例 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 会检索喜欢该帖子的用户列表。


网站公告

今日签到

点亮在社区的每一天
去签到