フィールドを持つ単純な 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=>user_id) Zlist 給与 (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
これは絶対に遅いです (なぜ 10 万個の要素をコピーしてほとんどを削除するのでしょうか?)。
これを redis で少なくとも同等に効率的に実装する方法はありますか?