2016-08-10 7 views
1

私は位置を格納するためにRedis Geo APIを使用しています。その後、GEORADIUSでそれらをフェッチします。 私はGEORADIUSで場所を取得すると、緯度、経度、各場所の名前のみを設定できるので、他のデータをどのように保存したり取得したりできますか?私の心に来るGeo-redis、追加データを保存

まず最初は、キーとしてGEOADDnameを使用して、通常のキー/値のセットで追加データを格納し、キーがnameと同じもので、GEORADIUSと位置の配列を取得しましたその配列をループしてnameをキーとして他のデータをフェッチします。

これは正しいアプローチですか、そうするのが良い方法ですか?

答えて

1

他のデータを更新/アクセスする必要がある場合は、別のキー(通常はハッシュ)に格納することが理にかなっています。もちろん

GEOADD geoset lon lat name:data1:data2:...:datan 

、クエリの応答を取得するとき、あなた」:nameあたりの他のデータは不変とだけ地理問い合わせへの結合にアクセスしている場合は、あなただけ例えば、name後にそれを「埋め込む」ことができます結果を「デコード」して、それぞれの構成要素に戻す必要があります。

+0

デフォルトでは 'GEORADIUS'は' name'のみを返し、 'WITH..'iを使うと座標、距離などを得ることができます。埋め込みデータを含むすべてのものを取得するためのクエリはどのようになりますか?また、私はオブジェクトを格納する場合JSON文字列として格納する必要がありますか? – Fr0z3n

+0

アイデアはちょうど名前の代わりに、残りのデータを追加するということです。次に、名前を取得することはペイロード全体を取得することを意味します。 JSONは有効なエンコーディングですが、これは幾分膨らんでいることに注意してください - 私の例のように、msgpackか、単純なデリミタが良い(よりリーンな)代替です。また、Luaのほんの少しで、エンコーディングやデコードをサーバーに移すことができます。 –

+0

さて、それは追加のキー/価値だと思っていた。要素を削除するための参照として 'name'を使用し、' name'にデータを追加する必要があります。これは私ができることではありません。だから、別のセットを使うとそれは唯一の方法だと思うが、サーバースクリプティングの別の方法がある場合を除き、私はredisには新しく、私はLuaを知らない。 – Fr0z3n

関連する問題