Redis GEO 主要用于存儲地理位置信息,并對存儲的信息進行操作,該功能在 Redis 3.2 版本新增。
Redis GEO 操作方法有:
geoadd:添加地理位置的坐標。
geopos:獲取地理位置的坐標。
geodist:計算兩個位置之間的距離。
georadius:根據(jù)用戶給定的經(jīng)緯度坐標來獲取指定范圍內(nèi)的地理位置集合。
georadiusbymember:根據(jù)儲存在位置集合里面的某個地點獲取指定范圍內(nèi)的地理位置集合。
geohash:返回一個或多個位置對象的 geohash 值。
geoadd 用于存儲指定的地理空間位置,可以將一個或多個經(jīng)度(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 用于從給定的 key 里返回所有指定名稱(member)的位置(經(jīng)度和緯度),不存在的返回 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 key member1 member2 [m|km|ft|mi]
member1 member2 為兩個地理位置。
最后一個距離單位參數(shù)說明:
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 以給定的經(jīng)緯度為中心, 返回鍵包含的位置元素當中, 與中心的距離不超過給定最大距離的所有位置元素。
georadiusbymember 和 GEORADIUS 命令一樣, 都可以找出位于指定范圍內(nèi)的元素, 但是 georadiusbymember 的中心點是由給定的位置元素決定的, 而不是使用經(jīng)度和緯度來決定中心點。
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]
參數(shù)說明:
m :米,默認單位。
km :千米。
mi :英里。
ft :英尺。
WITHDIST: 在返回位置元素的同時, 將位置元素與中心之間的距離也一并返回。
WITHCOORD: 將位置元素的經(jīng)度和維度也一并返回。
WITHHASH: 以 52 位有符號整數(shù)的形式, 返回位置元素經(jīng)過原始 geohash 編碼的有序集合分值。 這個選項主要用于底層應用或者調試, 實際中的作用并不大。
COUNT 限定返回的記錄數(shù)。
ASC: 查找結果根據(jù)距離從近到遠排序。
DESC: 查找結果根據(jù)從遠到近排序。
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>
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>