介紹
Redis3.2版本提供了GEO(地理信息定位)功能,支持存儲地理位置信息用來實現諸如附近位置、搖一搖這類依賴於地理位置信息的功能,對於需要實現這些功能的開發者來說是一大福音
因爲GEO的底層實現是zset,所以支持zset的相關命令。
命令
增加地理位置信息
geoadd key longitude latitude member [longitude latitude member ...]
longitude、latitude、member分別是該地理位置的經度、緯度、成員。
獲取地理位置信息
geopos key member [member ...]
獲取兩個地理位置的距離
geodist key member1 member2 [unit]
其中unit代表返回結果的單位,包含以下四種:
- m(meters)代表米。
- km(kilometers)代表公里。
- mi(miles)代表英里。
- ft(feet)代表尺。
獲取指定位置範圍內的地理信息位置集合
georadius key longitude latitude radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadiusbymember key member radiusm|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadius和georadiusbymember兩個命令的作用是一樣的,都是以一個地理位置爲中心算出指定半徑內的其他地理信息位置,不同的是georadius命令的中心位置給出了具體的經緯度,georadiusbymember只需給出成員即可。其中radiusm|km|ft|mi是必需參數,指定了半徑(帶單位),這兩個命令有很多可選參數,如下所示:
- withcoord:返回結果中包含經緯度。
- withdist:返回結果中包含離中心節點位置的距離。
- withhash:返回結果中包含geohash。
- COUNT count:指定返回結果的數量。
- asc | desc:返回結果按照離中心節點的距離做升序或者降序。
- store key:將返回結果的地理位置信息保存到指定鍵。
- storedist key:將返回結果離中心節點的距離保存到指定鍵。
獲取geohash
geohash key member [member ...]
geohash有如下特點:
- GEO的數據類型爲zset,Redis將所有地理位置信息的geohash存放在zset中。
- 字符串越長,表示的位置更精確。
geohash長度 | 精確度 |
---|---|
1 | 2,500 |
2 | 630 |
3 | 78 |
4 | 20 |
5 | 2.4 |
6 | 0.61 |
7 | 0.076 |
8 | 0.019 |
9 | 0.002 |
- 兩個字符串越相似,它們之間的距離越近,Redis利用字符串前綴匹配算法實現相關的命令。
- geohash編碼和經緯度是可以相互轉換的。
刪除地理位置信息
zrem key member
GEO沒有提供刪除成員的命令,但是因爲GEO的底層實現是zset,所以可以借用zrem命令實現對地理位置信息的刪除。