面试题答案
一键面试场景一:排行榜
- 场景描述:在游戏、网站等场景中,经常需要根据用户的成绩、活跃度等指标进行排名,Redis 的有序集合可以方便地实现排行榜功能。
- 示例:假设我们有一个游戏,需要根据玩家的得分来生成排行榜。
上述命令中,# 添加玩家得分 ZADD game_rankings 100 player1 ZADD game_rankings 120 player2 ZADD game_rankings 80 player3 # 获取排行榜(按得分从高到低) ZREVRANGE game_rankings 0 -1 WITHSCORES
ZADD game_rankings 100 player1
表示将玩家player1
的得分100
添加到名为game_rankings
的有序集合中。ZREVRANGE game_rankings 0 -1 WITHSCORES
命令用于获取整个排行榜,0
表示起始位置,-1
表示结束位置,WITHSCORES
表示同时返回成员的分数。
场景二:时间序列数据
- 场景描述:对于一些按时间顺序记录的数据,比如网站的访问记录,以时间戳作为分数,记录的具体内容作为成员,可以方便地进行时间相关的统计和查询。
- 示例:记录网站用户的访问时间。
在上述示例中,先获取当前时间戳# 获取当前时间戳作为分数 local current_timestamp = os.time() # 添加用户访问记录,假设用户名为 user1 ZADD website_access_records current_timestamp user1 # 获取某个时间段内的访问记录,假设获取当前时间前一小时内的记录 local one_hour_ago_timestamp = current_timestamp - 3600 ZRANGEBYSCORE website_access_records one_hour_ago_timestamp current_timestamp
current_timestamp
,使用ZADD
命令将用户user1
的访问记录添加到website_access_records
有序集合中。然后计算一小时前的时间戳one_hour_ago_timestamp
,通过ZRANGEBYSCORE
命令获取该时间段内的访问记录。这里假设使用 Lua 脚本与 Redis 交互,实际应用中可根据具体编程语言进行调整。