面试题答案
一键面试基于外部键值对集合在Redis中使用BY选项对列表或有序集合排序的方法
- 基本原理:当使用
SORT key BY pattern
命令时,pattern
指定了外部键的模式。Redis会遍历待排序的列表或有序集合中的每个元素,用元素的值替换pattern
中的占位符,然后根据替换后的键去查找对应的值,并以此值作为排序依据。 - 示例:
- 假设有一个Redis列表
myList
,包含元素element1
、element2
、element3
。 - 同时有一些外部键值对,键的命名规则为
externalKey:{elementValue}
,例如externalKey:element1
,externalKey:element2
,externalKey:element3
,对应的值分别为3
、1
、2
。 - 在Redis命令行中,可以执行
SORT myList BY externalKey:*
。这样Redis会用列表中的每个元素替换externalKey:*
中的*
,然后获取对应键的值3
、1
、2
,并以这些值对列表进行排序,最终返回的结果是按照1
、2
、3
对应的元素顺序排列,即element2
、element3
、element1
。
- 假设有一个Redis列表
适合使用BY选项排序的实际应用场景
- 电商商品排序:假设在电商系统中,有一个Redis列表存储商品ID,同时对于每个商品ID,在Redis中有一个对应的键值对存储商品的销量(例如键为
product:销量:{商品ID}
,值为销量数字)。如果要根据商品销量对商品ID列表进行排序展示热门商品,就可以使用SORT 商品ID列表 BY product:销量:*
。这样就能很方便地根据商品销量这个外部键值对集合对商品ID列表进行排序,按销量从高到低展示商品。 - 用户排行榜关联数据排序:比如有一个Redis有序集合存储用户ID及对应的活跃度分数,同时对于每个用户ID,有一个外部键值对存储用户的注册时间(键为
user:注册时间:{用户ID}
,值为时间戳)。如果要根据用户注册时间对活跃度排名靠前的用户进行排序(例如展示新用户中活跃度高的用户),就可以使用SORT 活跃度排名靠前的用户ID有序集合 BY user:注册时间:*
,基于注册时间这个外部键值对集合对用户ID集合进行排序。