掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流

Redis GEO 提供了 6 個(gè)常用命令:
Redis GEO 有很多應(yīng)用場(chǎng)景,舉一個(gè)簡(jiǎn)單的例子,你一定點(diǎn)過外賣,或者用過打車軟件,在這種 APP上會(huì)顯示“店家距離你有多少米”或者“司機(jī)師傅距離你有多遠(yuǎn)”,類似這種功能就可以使用 Redis GEO 實(shí)現(xiàn)。數(shù)據(jù)庫中存放著商家所處的經(jīng)緯度,你的位置則由手機(jī)定位獲取,這樣 APP 就計(jì)算出了最終的距離。再比如微信中附近的人、搖一搖、實(shí)時(shí)定位等功能都依賴地理位置實(shí)現(xiàn)。
GEO 提供以下操作命令,如下表所示:
| 序號(hào) | 命令 | 說明 |
|---|---|---|
| 1 | GEOADD | 將指定的地理空間位置(緯度、經(jīng)度、名稱)添加到指定的 key 中。 |
| 2 | GEOPOS | 從 key 里返回所有給定位置元素的位置(即經(jīng)度和緯度) |
| 3 | GEODIST | 返回兩個(gè)地理位置間的距離,如果兩個(gè)位置之間的其中一個(gè)不存在, 那么命令返回空值。 |
| 4 | GEORADIUS | 根據(jù)給定地理位置坐標(biāo)(經(jīng)緯度)獲取指定范圍內(nèi)的地理位置集合。 |
| 5 | GEORADIUSBYMEMBER | 根據(jù)給定地理位置(具體的位置元素)獲取指定范圍內(nèi)的地理位置集合。 |
| 6 | GEOHASH | 獲取一個(gè)或者多個(gè)的地理位置的 GEOHASH 值。 |
| 7 | ZREM | 通過有序集合的 zrem 命令實(shí)現(xiàn)對(duì)地理位置信息的刪除。 |
將指定的地理空間位置(緯度、經(jīng)度、名稱)添加到指定的 key 中。語法格式如下:
GEOADD key longitude latitude member [longitude latitude member ...]
將給定的經(jīng)緯度的位置名稱(緯度、經(jīng)度、名字)與 key 相對(duì)應(yīng),這些數(shù)據(jù)以有序集合的形式進(jìn)行儲(chǔ)存。
GEOADD命令以標(biāo)準(zhǔn)的
x,y形式接受參數(shù), 所以用戶必須先輸入經(jīng)度,然后再輸入緯度。
GEOADD命令能夠記錄的坐標(biāo)數(shù)量是有限的,如果位置非常接近兩極(南極/北極)區(qū)域,那么將無法被索引到。因此當(dāng)您輸入經(jīng)緯度時(shí),需要注意以下規(guī)則:
注意:如果您輸入一個(gè)超出范圍的經(jīng)緯度時(shí),GEOADD 命令將返回一個(gè)錯(cuò)誤。
示例演示如下:
#添加城市地理位置 127.0.0.1:6379> geoadd city 116.20 39.56 beijing 120.52 30.40 shanghai (integer) 2 #查詢城市地理位置 127.0.0.1:6379> GEOPOS city beijing shanghai 1) 1) "116.19999736547470093" 2) "39.56000019952067248" 2) 1) "120.52000075578689575" 2) "30.39999952668997452"
該命令用于獲取兩個(gè)地理位置間的距離。返回值為雙精度浮點(diǎn)數(shù),其語法格式如下:
GEODIST key member1 member2 [unit]
參數(shù) unit 是表示距離單位,取值如下所示:
注意:如果沒有指出距離單位,那么默認(rèn)取值為
m。示例如下:
127.0.0.1:6379> GEODIST city beijing shanghai "1091868.8970" 127.0.0.1:6379> GEODIST city beijing shanghai km "1091.8689" 127.0.0.1:6379> GEODIST city beijing shanghai mi "678.4576"
注意:計(jì)算舉例時(shí)存在 0.5% 左右的誤差,這是由于 Redis GEO 把地球假設(shè)成了完美的球體。
以給定的經(jīng)緯度為中心,計(jì)算出 key 包含的地理位置元素與中心的距離不超過給定最大距離的所有位置元素,并將其返回。
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]
參數(shù)說明:
注意:該命令默認(rèn)返回的是未排序的位置元素。通過 ASC 與 DESC 可讓返回的位置元素以升序或者降序方式排列。
命令應(yīng)用示例如下:
#添加幾個(gè)地理位置元素
127.0.0.1:6379> GEOADD city 106.45 29.56 chongqing 120.33 36.06 qingdao 103.73 36.03 lanzhou
(integer) 3
127.0.0.1:6379> GEOADD city 106.71 26.56 guiyang
(integer) 1
#以首都的坐標(biāo)為中心,計(jì)算各個(gè)城市距離首都的距離,最大范圍設(shè)置為1500km
#同時(shí)返回距離,與位置元素的經(jīng)緯度
127.0.0.1:6379> GEORADIUS city 116.41 39.91 1500 km WITHCOORD WITHDIST
1) 1) "chongqing"
2) "1465.5618"
3) 1) "106.4500012993812561"
2) "29.56000053864853072"
2) 1) "lanzhou"
2) "1191.2793"
3) 1) "103.72999995946884155"
2) "36.03000049919800318"
3) 1) "shanghai"
2) "1121.4882"
3) 1) "120.52000075578689575"
2) "30.39999952668997452"
4) 1) "qingdao"
2) "548.9304"
3) 1) "120.3299984335899353"
2) "36.05999892411877994"
5) 1) "beijing"
2) "42.8734"
3) 1) "116.19999736547470093"
2) "39.56000019952067248"
根據(jù)給定的地理位置坐標(biāo)(即經(jīng)緯度)獲取指定范圍內(nèi)的位置元素集合。其語法格式如下:
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DES]
該命令與 GEORADIUS 命令相似,不過它選擇的中心的是具體的位置元素,而非經(jīng)緯度坐標(biāo)。示例如下:
#以貴陽為中心,最大距離不超過900km
127.0.0.1:6379> GEORADIUSBYMEMBER city guiyang 900 km WITHCOORD WITHDIST
1) 1) "guiyang"
2) "0.0000"
3) 1) "106.70999854803085327"
2) "26.56000089385899798"
#只有重慶符合條件
2) 1) "chongqing"
2) "334.6529"
3) 1) "106.4500012993812561"
2) "29.56000053864853072"
返回一個(gè)或多個(gè)位置元素的哈希字符串,該字符串具有唯一 ID 標(biāo)識(shí),它與給定的位置元素一一對(duì)應(yīng)。示例如下:
127.0.0.1:6379> GEOHASH city lanzhou beijing shanghai 1) "wq3ubrjcun0" 2) "wx49h1wm8n0" 3) "wtmsyqpuzd0"
用于刪除指定的地理位置元素,示例如下:
127.0.0.1:6379> zrem city beijing shanghai (integer) 2
了解更多命令請(qǐng)參考:http://redisdoc.com/geo/geohash.html

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流