MST

星途 面试题库

面试题:Redis SADD与SMEMBERS与其他数据结构的关联及应用拓展

在一个复杂的社交网络系统中,除了使用Redis集合来存储用户的关注列表(类似SADD添加关注,SMEMBERS获取关注列表),还需要结合Redis的其他数据结构(如哈希、有序集合等)来实现更丰富的功能,如用户信息存储、粉丝排行榜等。请设计一套完整的基于Redis的数据结构使用方案,详细说明每个数据结构的作用以及相关操作的实现逻辑。
33.3万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

1. 用户信息存储(哈希 Hash)

  • 作用:用于存储用户的详细信息,如用户名、年龄、性别、简介等,方便快速获取和更新用户的各项属性。
  • 数据结构示例HSET user:1 name "John" age 30 gender "male" bio "Software engineer"
  • 操作实现逻辑
    • 添加或更新用户信息:使用 HSET key field value [field value ...] 命令,例如 HSET user:{userId} name {userName} age {userAge}。可以一次设置多个字段值,若字段已存在则更新其值。
    • 获取用户信息:使用 HGETALL key 获取所有字段和值,或 HGET key field 获取指定字段的值,如 HGET user:1 name
    • 删除用户信息字段:使用 HDEL key field [field ...] 命令,如 HDEL user:1 bio 可删除用户的简介字段。

2. 用户关注列表(集合 Set)

  • 作用:存储用户关注的其他用户 ID,可方便地进行添加关注、取消关注以及获取关注列表操作,且集合天然去重,保证用户不会重复关注同一人。
  • 数据结构示例SADD follow:1 2 3 4 表示用户 1 关注了用户 2、3、4。
  • 操作实现逻辑
    • 添加关注:使用 SADD key member [member ...] 命令,例如 SADD follow:{userId} {followedUserId}
    • 取消关注:使用 SREM key member [member ...] 命令,如 SREM follow:1 2 表示用户 1 取消对用户 2 的关注。
    • 获取关注列表:使用 SMEMBERS key 命令,如 SMEMBERS follow:1 可获取用户 1 关注的所有用户 ID。

3. 用户粉丝列表(集合 Set)

  • 作用:与关注列表相对应,存储关注当前用户的其他用户 ID,用于统计粉丝数量和获取粉丝列表。
  • 数据结构示例SADD fans:1 5 6 7 表示用户 1 有粉丝 5、6、7。
  • 操作实现逻辑
    • 添加粉丝:当用户 A 关注用户 B 时,除了在 follow:A 集合中添加 B 的 ID,还需在 fans:B 集合中添加 A 的 ID,即 SADD fans:{followedUserId} {userId}
    • 取消粉丝:当用户 A 取消关注用户 B 时,在 fans:B 集合中删除 A 的 ID,使用 SREM fans:{followedUserId} {userId}
    • 获取粉丝列表:使用 SMEMBERS key 命令,如 SMEMBERS fans:1 可获取用户 1 的所有粉丝 ID。

4. 粉丝排行榜(有序集合 Sorted Set)

  • 作用:按照粉丝数量对用户进行排序,可方便地获取粉丝数量最多的用户,例如排行榜前 10 名用户。
  • 数据结构示例ZADD fanRank 100 1 80 2 表示用户 1 有 100 个粉丝,用户 2 有 80 个粉丝。
  • 操作实现逻辑
    • 更新粉丝排行榜:每当用户的粉丝数量发生变化(添加或取消粉丝)时,重新计算粉丝数量并使用 ZADD key score member [score member ...] 命令更新有序集合。例如,当用户 1 的粉丝数量变为 105 时,执行 ZADD fanRank 105 1
    • 获取粉丝排行榜:使用 ZRANGE key start stop [WITHSCORES] 命令获取排名范围,如 ZRANGE fanRank 0 9 WITHSCORES 可获取粉丝排行榜前 10 名及其粉丝数量。若要获取倒序排行榜(粉丝数量从高到低),可使用 ZREVRANGE key start stop [WITHSCORES] 命令。