面试题答案
一键面试- Redis命令:
ZREVRANGEBYSCORE userscore +inf -inf BYSCORE | awk '{print $1, int($2)*int($2)}' | sort -k2nr | awk '{print $1}' | xargs -I {} ZADD sorteduserscore 0 {}
- 简要解释:
ZREVRANGEBYSCORE userscore +inf -inf BYSCORE
:从userscore
有序集合中按照成绩从高到低获取所有用户及其成绩。awk '{print $1, int($2)*int($2)}'
:使用awk
工具对获取的数据进行处理,输出用户名和成绩的平方值。sort -k2nr
:根据成绩平方值进行降序排序。awk '{print $1}'
:只输出用户名。xargs -I {} ZADD sorteduserscore 0 {}
:将排序后的用户名依次添加到新的有序集合sorteduserscore
中,分值暂时设为0(如果需要可以后续更新分值为平方值等操作)。
注:上述命令在Linux环境下结合Redis-cli使用,且假设有序集合键名为userscore
,实际使用时需根据情况调整。如果仅使用Redis命令本身,原生Redis不支持直接对分值进行复杂计算后排序,上述方法借助了外部工具实现需求。