假设我们有一个带有字段的简单 mysql 表(用户):
id
rating
salary
我想在指定范围(50-100)内获得 10 个评分和薪水最高的用户,即在 mysql 中它会是
SELECT id from user WHERE salary>50 and salary<100 ORDER by rating limit 0, 10
这在 100K 用户表上运行 20 毫秒。
假设我在 redis 中有相同的: Zlist rating (rating=>user_id) Zlist Salary (salary=>user_id)
我在 redis 中看到的所有解决方案都包括复制 100k 工资 Zlist、删除不需要的条目以及与 100k 评级列表合并,例如
zinterstore 1 search salary
zremrange search -inf 50
zremrange search 100 +inf
zinterstore 2 search rating weights 0 1
zrange search 0 10
这绝对是慢的(为什么要复制 100k 元素来删除其中的大部分?)。
有没有办法实现这个至少与redis相当有效?