MST

星途 面试题库

面试题:Redis有序集合在辅助MySQL销量排名查询中的基本应用

假设在MySQL中有一张商品表,包含商品ID和销量字段。请阐述如何利用Redis的有序集合辅助实现按照销量对商品进行排名查询,描述主要的操作步骤和数据结构的设计思路。
49.2万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试
  1. 数据结构设计思路
    • 在Redis中,使用有序集合(Sorted Set)来存储商品的排名信息。有序集合的成员(member)为商品ID,分值(score)为商品的销量。这样可以根据分值(销量)自动对商品ID进行排序。
  2. 主要操作步骤
    • 数据同步
      • 当MySQL商品表中的销量数据发生变化(插入新商品、更新销量等)时,需要同步更新Redis中的有序集合。例如,当有新商品插入到MySQL商品表,且获取到其初始销量后,在Redis中使用ZADD命令将商品ID作为成员,销量作为分值添加到有序集合中。示例命令:ZADD product_rankings <销量> <商品ID>
      • 当商品销量在MySQL中更新时,先从Redis有序集合中获取该商品当前的分值(销量),计算出与新销量的差值,然后使用ZINCRBY命令更新有序集合中该商品的分值。示例:假设商品ID为123,新销量为new_sales,先通过ZSCORE product_rankings 123获取当前销量current_sales,计算差值delta = new_sales - current_sales,然后执行ZINCRBY product_rankings <delta> 123
    • 排名查询
      • 如果要获取某个商品的排名,可以使用ZRANK命令。例如,要获取商品ID为123的商品在销量排名中的位置,执行ZRANK product_rankings 123,该命令返回的是从0开始的排名索引(排名从低到高)。如果要获取从高到低的排名,可以使用ZREVRANK命令。
      • 如果要获取排名前N的商品列表,可以使用ZRANGE命令(从低到高排序获取)或ZREVRANGE命令(从高到低排序获取)。例如,要获取销量排名前10的商品ID列表(从高到低排序),执行ZREVRANGE product_rankings 0 9 WITHSCORESWITHSCORES选项会同时返回商品ID及其对应的销量分值。