11

私はredisを学んでおり、初心者の質問があります。redis はキーがすべてであることを知っています。特定のキーの値をクエリ/解析する方法はありますか?

キーといくつかの json を値として持っているとしましょう。例えば

key1 = {"id":"1", "colour":"red}
key2 = {"id":"2", "colour":"green}
key3 = {"id":"3", "colour":"red}

color=red を持つすべての「値 (json) を照会するにはどうすればよいですか?

select all values WHERE colour==red
4

1 に答える 1

17

必要なのは、フィールドの逆インデックスcolour、つまりマッピングcolour -> {keyA, ..., keyB}です"red" -> {key1, key2}

Ohmで説明されているように、Redisセットを使用してこのインデックスを維持できます。

Redis のセットは順序付けられていないリストです [...] 各モデルのインスタンスを追跡し、インデックスを生成および維持するために、Ohm によって内部的に使用されます。

Didier Spezia によるこの回答も参照してください。

要約すると、クエリを実行する方法でデータを保存します

オームの例

舞台裏でオームに起こっていることは次のとおりです。

最初に Ohm モデルを宣言し、colourクエリを実行するために属性にインデックスを付けます。

require "ohm"

class Doc < Ohm::Model
  attribute :colour
  index :colour
end

次に、いくつかのドキュメントを作成します。

ruby> Doc.create(:colour => "red")
ruby> Doc.create(:colour => "green")
ruby> Doc.create(:colour => "red")

このステップで、オームが関連するインデックスに保存したものを調べます。

redis> SMEMBERS "Doc:indices:colour:red"
1) "1"
2) "3"

もう 1 つの赤いドキュメントを作成します。

ruby> Doc.create(:colour => "red")

インデックスを再検査します。

redis> SMEMBERS "Doc:indices:colour:red"
1) "1"
2) "3"
3) "4"

最後のレコードを反映するようにインデックスが更新されました。

ドキュメントを効率的にクエリできるようになりました。

ruby> Doc.find(:colour => "red").each {|d| puts d.id}
1
3
4
于 2013-10-10T07:49:49.340 に答える