1. 程式人生 > 資料庫 >redis GEO詳解

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 ...]

geoadd例項:

//新增兩個位置資訊
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 ...]

geopos例項:

//新增兩個位置資訊
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"
//不存在,返回nil
3) (nil)
redis>

geodist:

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

geodist語法格式如下:

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

member1 、 member2為兩個地理位置,最後為距離單位引數說明。

  • m:米,預設單位
  • km:千米
  • mi:英里
  • ft:英尺

geodist例項:

//新增兩個位置資訊
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和georedius命令一樣,都可以找出位於指定範圍內的元素,但是georadiusbymemeber的中心點是由給定的位置元素決定的,而不是使用經度和維度來決定中心點。

georadius與georadiusbymemeber語法格式如下:

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]
  • withdist:在返回位置元素的同時,將位置與中心之間的距離也一併返回
  • withcoord:將位置元素的經度和維度也一併返回
  • withhash:以52為有符號整數的形式,返回位置元素經過原始geohash編碼的有序集合分值。這個選項主要用於底層應用或者除錯,實際中作用並不大
  • count:限定返回的記錄數
  • asc:查詢結果根據距離從近到遠排序
  • decs:查詢結果根據從遠到近排序

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 ...]

geohash例項:

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>