Redis GEO

Redis GEO

Redis GEO 主要用於儲存地理位置資訊,並對儲存的資訊進行操作,該功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:新增地理位置的座標。
  • geopos:獲取地理位置的座標。
  • geodist:計算兩個位置之間的距離。
  • georadius:根據使用者給定的經緯度座標來獲取指定範圍內的地理位置集合。
  • georadiusbymember:根據儲存在位置集合裡面的某個地點獲取指定範圍內的地理位置集合。
  • geohash:返回一個或多個位置物件的 geohash 值。

geoadd

geoadd 用於儲存指定的地理空間位置,可以將一個或多個經度(longitude)、緯度(latitude)、位置名稱(member)新增到指定的 key 中。

geoadd 語法格式如下:

GEOADD key longitude latitude member [longitude latitude member ...]

以下例項中 key 為 Sicily,Palermo 和 Catania 為位置名稱 :

例項

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEODIST Sicily Palermo Catania
"166274.1516"
redis> GEORADIUS Sicily 15 37 100 km
1) "Catania"
redis> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"
redis>

geopos

geopos 用於從給定的 key 裡返回所有指定名稱(member)的位置(經度和緯度),不存在的返回 nil。

geopos 語法格式如下:

GEOPOS key member [member ...]

例項

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEOPOS Sicily Palermo Catania NonExisting
1) 1) "13.36138933897018433"
   2) "38.11555639549629859"
2) 1) "15.08726745843887329"
   2) "37.50266842333162032"
3) (nil)
redis>

geodist

geodist 用於返回兩個給定位置之間的距離。

geodist 語法格式如下:

GEODIST key member1 member2 [m|km|ft|mi]

member1 member2 為兩個地理位置。

最後一個距離單位引數說明:

  • m :米,預設單位。
  • km :千米。
  • mi :英里。
  • ft :英尺。
  • > 計算 Palermo 與 Catania 之間的距離:

    例項

    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (integer) 2
    redis> GEODIST Sicily Palermo Catania
    "166274.1516"
    redis> GEODIST Sicily Palermo Catania km
    "166.2742"
    redis> GEODIST Sicily Palermo Catania mi
    "103.3182"
    redis> GEODIST Sicily Foo Bar
    (nil)
    redis>

    georadius、georadiusbymember

    georadius 以給定的經緯度為中心, 返回鍵包含的位置元素當中, 與中心的距離不超過給定最大距離的所有位置元素。

    georadiusbymember 和 GEORADIUS 命令一樣, 都可以找出位於指定範圍內的元素, 但是 georadiusbymember 的中心點是由給定的位置元素決定的, 而不是使用經度和緯度來決定中心點。

    georadius 與 georadiusbymember 語法格式如下:

    GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
    GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

    引數說明:

    • m :米,預設單位。
    • km :千米。
    • mi :英里。
    • ft :英尺。
    • WITHDIST: 在返回位置元素的同時, 將位置元素與中心之間的距離也一併返回。
    • WITHCOORD: 將位置元素的經度和維度也一併返回。
    • WITHHASH: 以 52 位有符號整數的形式, 返回位置元素經過原始 geohash 編碼的有序集合分值。 這個選項主要用於底層應用或者除錯, 實際中的作用並不大。
    • COUNT 限定返回的記錄數。
    • ASC: 查詢結果根據距離從近到遠排序。
    • DESC: 查詢結果根據從遠到近排序。

    georadius 例項:

    例項

    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (integer) 2
    redis> GEORADIUS Sicily 15 37 200 km WITHDIST
    1) 1) "Palermo"
       2) "190.4424"
    2) 1) "Catania"
       2) "56.4413"
    redis> GEORADIUS Sicily 15 37 200 km WITHCOORD
    1) 1) "Palermo"
       2) 1) "13.36138933897018433"
          2) "38.11555639549629859"
    2) 1) "Catania"
       2) 1) "15.08726745843887329"
          2) "37.50266842333162032"
    redis> GEORADIUS Sicily 15 37 200 km WITHDIST WITHCOORD
    1) 1) "Palermo"
       2) "190.4424"
       3) 1) "13.36138933897018433"
          2) "38.11555639549629859"
    2) 1) "Catania"
       2) "56.4413"
       3) 1) "15.08726745843887329"
          2) "37.50266842333162032"
    redis>

    georadiusbymember 例項:

    例項

    redis> GEOADD Sicily 13.583333 37.316667 "Agrigento"
    (integer) 1
    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (integer) 2
    redis> GEORADIUSBYMEMBER Sicily Agrigento 100 km
    1) "Agrigento"
    2) "Palermo"
    redis>

    geohash

    Redis GEO 使用 geohash 來儲存地理位置的座標。

    geohash 用於獲取一個或多個位置元素的 geohash 值。

    geohash 語法格式如下:

    GEOHASH key member [member ...]

    例項:

    例項

    redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
    (integer) 2
    redis> GEOHASH Sicily Palermo Catania
    1) "sqc8b49rny0"
    2) "sqdtr74hyu0"
    redis>