面试题答案
一键面试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。
- 添加粉丝:当用户 A 关注用户 B 时,除了在
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]
命令。
- 更新粉丝排行榜:每当用户的粉丝数量发生变化(添加或取消粉丝)时,重新计算粉丝数量并使用