MST

星途 面试题库

面试题:Redis中BY选项在排序时的基本使用方式及场景

请阐述在Redis中使用BY选项进行排序时,如何基于外部键值对集合来对列表或有序集合进行排序?请举例说明一个适合使用BY选项排序的实际应用场景。
38.7万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

基于外部键值对集合在Redis中使用BY选项对列表或有序集合排序的方法

  1. 基本原理:当使用SORT key BY pattern命令时,pattern指定了外部键的模式。Redis会遍历待排序的列表或有序集合中的每个元素,用元素的值替换pattern中的占位符,然后根据替换后的键去查找对应的值,并以此值作为排序依据。
  2. 示例
    • 假设有一个Redis列表myList,包含元素element1element2element3
    • 同时有一些外部键值对,键的命名规则为externalKey:{elementValue},例如externalKey:element1externalKey:element2externalKey:element3,对应的值分别为312
    • 在Redis命令行中,可以执行SORT myList BY externalKey:*。这样Redis会用列表中的每个元素替换externalKey:*中的*,然后获取对应键的值312,并以这些值对列表进行排序,最终返回的结果是按照123对应的元素顺序排列,即element2element3element1

适合使用BY选项排序的实际应用场景

  1. 电商商品排序:假设在电商系统中,有一个Redis列表存储商品ID,同时对于每个商品ID,在Redis中有一个对应的键值对存储商品的销量(例如键为product:销量:{商品ID},值为销量数字)。如果要根据商品销量对商品ID列表进行排序展示热门商品,就可以使用SORT 商品ID列表 BY product:销量:*。这样就能很方便地根据商品销量这个外部键值对集合对商品ID列表进行排序,按销量从高到低展示商品。
  2. 用户排行榜关联数据排序:比如有一个Redis有序集合存储用户ID及对应的活跃度分数,同时对于每个用户ID,有一个外部键值对存储用户的注册时间(键为user:注册时间:{用户ID},值为时间戳)。如果要根据用户注册时间对活跃度排名靠前的用户进行排序(例如展示新用户中活跃度高的用户),就可以使用SORT 活跃度排名靠前的用户ID有序集合 BY user:注册时间:*,基于注册时间这个外部键值对集合对用户ID集合进行排序。