面试题答案
一键面试ALPHA选项底层实现逻辑
- 字符串比较:当使用
SORT key ALPHA
时,Redis将集合或列表中的每个元素当作字符串来处理。在排序过程中,依据字典序进行比较。例如,对于英文字符串,按照字母顺序比较,先比较首字母,若相同则比较下一个字母,依此类推。 - 比较函数:底层实现依赖于特定的字符串比较函数,该函数会严格按照字符编码(通常是UTF - 8)的顺序来判断两个字符串的先后关系。
BY选项底层实现逻辑
- 外部参照排序:
SORT key BY pattern
允许通过外部的键来决定排序顺序。Redis会为集合或列表中的每个元素,根据给定的模式查找对应的外部键的值。 - 值提取与比较:提取外部键的值后,将这些值作为排序依据。如果外部键对应的值是数值类型,Redis会按照数值大小进行排序;如果是字符串类型,当未指定
ALPHA
时,也按数值比较(如果字符串可转换为数值),若指定ALPHA
,则按字典序比较。
适用数据场景举例
- ALPHA选项场景:假设Redis中有一个集合存储了一系列商品名称,如
{"book1", "book10", "book2"}
。如果想按照商品名称的字典序展示商品列表,就可以使用SORT key ALPHA
。这样就能得到符合用户习惯的按名称排序的结果,而不是按照数值大小(如果名称类似数字可能会按数值误解排序)。 - BY选项场景:假设有一个列表存储用户ID,同时有一系列以用户ID为键,用户积分值为值的键值对。例如列表
list:userids
存储{"user1", "user2", "user3"}
,同时存在user1:score
值为80
,user2:score
值为90
,user3:score
值为70
。若要按照用户积分对用户ID进行排序展示,可以使用SORT list:userids BY *:score
,这样就能得到按积分从高到低或从低到高(取决于是否有DESC
等修饰词)排序的用户ID列表。