LBS-近隣の人を検索-redisコマンド実装

4183 ワード

地理座標の位置付けに関する基礎知識と近所の人を探すMySQL版の実装について述べたが,本稿では主にredis版の実装について紹介する.
redisの3.2バージョンではgeoの機能がサポートされ始め、この機能はユーザーが与えた地理的位置情報を格納し、これらの情報を操作することができる.
本環境
MACOS10.13.4+8 Gメモリ+2.6 GHz+redis 4.0.2
コマンド#コマンド#
redisのgeoコマンドは全部で6つで、redis-geoはredisに統合されていないが付属モジュールである場合により多くのコマンドがあり、redisに統合された後に6つに簡略化された.私たちはまずredisのコマンドを通じてこの6つのコマンドを熟知してからspring-data-redisを通じてプロジェクトに統合して、私たちがしなければならない近くの人を探すことを実現します.
注意:前回のmysqlバージョンのPoint(緯度、経度)、緯度は更に前で、経度は後です.redisでは経度が前で、次元が後です.
中国語表示文字化けし解決策:./redis-cli-a redis-pass--rawは、コマンドの後に--rawを付け、--rawを加えた後に結果を戻すとフォーマットされず、友好的ではないように見えます.プロジェクトでは中国語を使わないほうがいいです.わけのわからない問題を避けたほうがいいです.
GEOADD
GEOADD key longitude latitude member [longitude latitude member ...]
1つ以上の地理空間位置をsorted setに追加
単一追加、戻り値:メンバーが新しい場合は1を返します.メンバーが更新された場合は0を返します.
127.0.0.1:6379> geoadd geo_test 120.1384162903 30.2532102251 "         "
1

≪複数追加、戻り値|Multi Add,Return Value|oem_src≫:メンバーがコミットされた数.
127.0.0.1:6379> geoadd geo_test 120.1333737373 30.2535809303 "    " 120.1258850098 30.2592154766 "      " 120.1365065575 30.2637377076 "     " 120.1337170601 30.2659987449 "     " 120.1510977745 30.2673701685 "     "
5

下部zsetを参照
127.0.0.1:6379> zrange geo_test 0 -1
    
         
      
     
     
     

GEOHASH
GEOHASH key member [member ...]
標準的な地理空間のGeohash文字列を返します.
127.0.0.1:6379> GEOHASH geo_test "    " "         "
wtmkjeqryk0
wtmkjg6jsp0

GEOPOS
GEOPOS key member [member ...]
地理空間の緯度を返します.指定された位置要素が存在しない場合、対応する配列項目は空です.
127.0.0.1:6379> GEOPOS geo_test "    " "         " NonExisting
120.13337105512619019
30.25358135892076206
120.13841897249221802
30.2532112896315013


GEODIST
GEODIST key member1 member2 [unit]
2つの空間の間の距離を返します.2つの場所のいずれかが存在しない場合、コマンドは空の値を返します.
指定した単位のパラメータunitは、次の単位のいずれかでなければなりません.
  • mは単位がmであることを示す.
  • km表示単位は千メートル.
  • miは単位がマイルであることを示しています.
  • ftは、単位がフィートであることを示します.

  • ユーザが単位パラメータを明示的に指定していない場合、GEODISTのデフォルトでは、単位として米が使用されます.GEODISTコマンドは、距離を計算する際に地球が完璧な球形であると仮定し、限界の場合、この仮定は最大0.5%の誤差をもたらす.
    127.0.0.1:6379> GEODIST geo_test "    " "         "
    486.7369
    127.0.0.1:6379> GEODIST geo_test "    " "         " km
    0.4867
    

    GEORADIUS
    GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
    クエリは、半径内のすべての空間要素の集合を指定します.
    所定の緯度を中心として、戻りキーに含まれる位置要素のうち、中心との距離が所定の最大距離を超えないすべての位置要素.
    範囲は、次のいずれかの単位で使用できます.
  • mは単位がmであることを示す.
  • km表示単位は千メートル.
  • miは単位がマイルであることを示しています.
  • ftは、単位がフィートであることを示します.

  • 次のオプションを指定すると、コマンドは追加の情報を返します.
  • WITHDIST:位置要素を返しながら、位置要素と中心との距離も一緒に返します.距離の単位とユーザが与えた範囲の単位は一致している.
  • WITHCOORD:位置要素の経度と次元も一緒に返します.
  • WITHHASH:52ビットの符号付き整数の形で、位置要素が元のgeohash符号化された秩序化集合スコアを返す.このオプションは主に下位アプリケーションやデバッグに使用され、実際の役割は大きくありません.

  • コマンドは、デフォルトでソートされていない位置要素を返します.次の2つのパラメータを使用して、戻り位置要素のソート方法を指定できます.
  • ASC:中心の位置に応じて、近くから遠くまで位置要素を返します.
  • DESC:中心の位置に応じて、位置要素を遠近に戻す.

  • デフォルトでは、GEORADIUSコマンドは一致するすべての位置要素を返します.ユーザーは、COUNTオプションを使用して前のN個の一致する要素を取得できますが、コマンドは内部で一致するすべての要素を処理する必要がある可能性があるため、非常に大きな領域を検索する際に、COUNTオプションのみを使用して少量の要素を取得しても、コマンドの実行速度が非常に遅くなる可能性があります.しかし一方で、COUNTオプションを使用して戻る要素の数を減らすことは、帯域幅を減らすのに依然として非常に役立ちます.
    127.0.0.1:6379> GEORADIUS geo_test 120.1333737373 30.2535809303 1000 m WITHDIST WITHCOORD
        
    0.2621
    120.13337105512619019
    30.25358135892076206
             
    486.4761
    120.13841897249221802
    30.2532112896315013
          
    954.0041
    120.12588769197463989
    30.25921604405797183
    

    GEORADIUSBYMEMBER
    GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
    クエリーは、半径内で一致する最大距離の地理空間要素を指定します.パラメータはGEORADIUSコマンドを参照できます
    127.0.0.1:6379> GEORADIUSBYMEMBER geo_test "    " 1 km
        
             
          
    

    www.redis.参照cn
    次のredis+spring実装を見てください.
    記事はブログに同時配信され、LBS-付近の人を検索する-redisコマンドが実現