面试题答案
一键面试- 数据结构设计思路:
- 在Redis中,使用有序集合(Sorted Set)来存储商品的排名信息。有序集合的成员(member)为商品ID,分值(score)为商品的销量。这样可以根据分值(销量)自动对商品ID进行排序。
- 主要操作步骤:
- 数据同步:
- 当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
。
- 当MySQL商品表中的销量数据发生变化(插入新商品、更新销量等)时,需要同步更新Redis中的有序集合。例如,当有新商品插入到MySQL商品表,且获取到其初始销量后,在Redis中使用
- 排名查询:
- 如果要获取某个商品的排名,可以使用
ZRANK
命令。例如,要获取商品ID为123
的商品在销量排名中的位置,执行ZRANK product_rankings 123
,该命令返回的是从0开始的排名索引(排名从低到高)。如果要获取从高到低的排名,可以使用ZREVRANK
命令。 - 如果要获取排名前N的商品列表,可以使用
ZRANGE
命令(从低到高排序获取)或ZREVRANGE
命令(从高到低排序获取)。例如,要获取销量排名前10的商品ID列表(从高到低排序),执行ZREVRANGE product_rankings 0 9 WITHSCORES
,WITHSCORES
选项会同时返回商品ID及其对应的销量分值。
- 如果要获取某个商品的排名,可以使用
- 数据同步: