MST

星途 面试题库

面试题:Redis有序集合在辅助MySQL用户活跃度排名中的基本使用

假设MySQL中有一张用户表,记录了用户的活跃度相关数据。请描述如何使用Redis有序集合来辅助实现用户活跃度排名,包括如何将MySQL中的数据导入到Redis有序集合,以及如何获取排名前N的用户?
31.6万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试
  1. 将MySQL数据导入Redis有序集合
    • 首先从MySQL的用户表中查询出用户ID及其对应的活跃度数据。假设用户表结构为users,包含字段user_id(用户ID)和activity_score(活跃度分数)。
    SELECT user_id, activity_score FROM users;
    
    • 然后在代码中(以Python为例,假设已安装redis - py库),连接Redis并将查询到的数据导入到Redis有序集合中。假设Redis连接对象为r
    import redis
    
    r = redis.Redis(host='localhost', port = 6379, db = 0)
    data = [(user_id, activity_score) for user_id, activity_score in cursor.fetchall()]
    for user_id, score in data:
        r.zadd('user_activity_rank', {user_id: score})
    
  2. 获取排名前N的用户
    • 使用Redis的zrevrange命令(因为活跃度分数越高排名越靠前,所以使用倒序)。在Python中:
    top_n_users = r.zrevrange('user_activity_rank', 0, N - 1, withscores = True)
    for user_id, score in top_n_users:
        print(f"User ID: {user_id}, Activity Score: {score}")
    
    • 在Redis命令行中,可以直接使用ZREVRANGE user_activity_rank 0 N - 1 WITHSCORES获取排名前N的用户及其分数。这里user_activity_rank是有序集合的键名,0表示起始位置,N - 1表示结束位置,WITHSCORES表示同时返回分数。