天天看點

Redis學習筆記 - 16.Redis 進階功能-GEO

介紹

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]
           
  • withcoord:傳回結果中包含經緯度。
  • withdist:傳回結果中包含離中心節點位置的距離。
  • withhash:傳回結果中包含geohash。
  • COUNT count:指定傳回結果的數量。
  • asc | desc:傳回結果按照離中心節點的距離做升序或者降序。
  • store key:将傳回結果的地理位置資訊儲存到指定鍵。
  • storedist key:将傳回結果離中心節點的距離儲存到指定鍵。

擷取geohash

geohash key member [member ...]
           
  • 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