私はredisに保存するジョブをたくさん持っています。それぞれは特別なキーで識別され、ハッシュ値には情報が含まれています。これらのジョブは、ピックアップされ、計算され、実行されると、success
フィールドがあり、計算が正常に終了した場合は、true
に設定されます。値のハッシュ値がtrue
に設定されたsuccess
キーを持つすべてのキーのリストを作成したいとします。Redis:ある基準に等しい値を持つキューからすべてのキーを取得する
Redisのストレージ:
foo_key_1 => {bar_hash_key: bar_value, baz_hash_key: baz_value, success: true}
foo_key_2 => {bar_hash_key: bar_value, baz_hash_key: baz_value, success: false}
上記の例では、私はすべてのRedisの中にキーとその成功のフィールドを介してスキャンのシンプルで効率的な方法のように、結果として[foo_key_1]
で終わるだろう。 O(Nはいえ
# redis is a connection to my redis server
all_keys = redis.keys # list of all keys in redis
for i in all_keys do # iterate through all keys in redis
if (redis.hgetall i)["success"] == true # if that key has success = true attrib
completed_keys.append(i) # append that key to a new list
end
end
問題お察しの通り、私はRedisの上のキーのたくさんを持っており、このされ、:
次のように現在、私のアプローチは、(ルビー擬似コードで)です)のパフォーマンスは、その反復的性質のために、パフォーマンスに関してかなり遅くなる。私はredisドキュメント/コマンドを徹底的に見てきましたが、この問題を解決する潜在的な候補者として私を打ち破ったことはありません私はレディス・グルではありませんが、かなり簡単です。私が見落としている可能性のあるベクター化された操作はありますか?
多くのありがとうございます。
こんにちは@Razvan、応答ありがとうございます。これは私が来たのとほぼ同じ結論ですが、実際にはキーを変更する必要がないので、この時点でかなり明確にレイアウトされています。まあ、少なくとも今私は自分の選択肢を知っている! – Stuart