在 Redis 中,Set 是一种无序集合数据结构,可以高效地存储唯一的值,并支持交集、并集、差集等操作,非常适合实现共同好友、共同关注等功能。以下是一些关于 Redis Set 的操作和示例:
基本命令和用法
1.添加元素

  • SADD将一个或多个元素添加到集合中,如果元素已存在,则会自动忽略。
    SADD friends:user_a “Alice” “Bob” “Charlie” “David”
    SADD friends:user_b “Charlie” “David” “Eve” “Frank”
    2.查看集合中的元素
  • SMEMBERS返回集合中的所有元素。
    SMEMBERS friends:user_a
    SMEMBERS friends:user_b
    3.求交集
  • SINTER找出两个集合的交集(共同好友)。
    SINTER friends:user_a friends:user_b
    4.求并集
  • SUNION返回两个集合的并集(所有好友)。
    SUNION friends:user_a friends:user_b
    5.求差集
  • SDIFF返回在第一个集合中有但在其他集合中没有的元素。
    SDIFF friends:user_a friends:user_b # 返回 user_a 独有的好友
    SDIFF friends:user_b friends:user_a # 返回 user_b 独有的好友

6.获取集合元素个数

  • SCARD获取集合中元素的数量。
    SCARD friends:user_a
    SCARD friends:user_b

7.检查元素是否存在

  • SISMEMBER判断某个元素是否在集合中。
    SISMEMBER friends:user_a “Alice” # 返回 1 表示存在,0 表示不存在

实际示例:共同好友、共同关注
假设我们想找出 user_a 和 user_b 的共同好友:

添加用户的好友

SADD friends:user_a “Alice” “Bob” “Charlie” “David”
SADD friends:user_b “Charlie” “David” “Eve” “Frank”

找出共同好友

SINTER friends:user_a friends:user_b

输出: “Charlie”, “David”

并集操作示例

获取所有好友(并集)

SUNION friends:user_a friends:user_b

输出: “Alice”, “Bob”, “Charlie”, “David”, “Eve”, “Frank”

差集操作示例

获取仅属于 user_a 的好友

SDIFF friends:user_a friends:user_b

输出: “Alice”, “Bob”

常见应用场景
1.社交网络:计算共同好友、共同关注、共同兴趣等。
2.推荐系统:基于用户关注、收藏等数据,快速找到共同的偏好。
3.权限管理:将用户的权限存入集合中,可以快速进行权限的交集和差集计算。
Redis Set 提供的高效集合操作,可以极大地简化和加速社交网络中的关系计算等场景。