Redis Geo相關命令。
GEOADD
最早可用版本:3.2.0
時間複雜度:O(log(N)),N是Sorted set元素數量
用法:GEOADDkey longitude latitude member [longitude latitude member …]
將指定的地理空間位置(緯度、經度、名稱)添加到指定key中。這些數據將存儲到sorted set,這樣爲了方便使用GEORADIUS或GEORADIUSBYMEMBER命令。
該命令採用標準格式參數x,y,所以經度必須在緯度之前。輸入的座標有如下限制:
有效的經度從-180度到180度
有效的緯度從-85.05112878度到85.05112878度
當座標位置超出上述指定範圍時,該命令返回一個錯誤。
GEODIST
最早可用版本:3.2.0
時間複雜度:O(log(N))
用法:GEODIST key member1 member2 [unit]
返回兩個給定位置之間的距離。
如果兩個位置之間的其中一個不存在,那麼命令返回空值。
指定單位的參數unit必須是以下其中一個:
m表示單位爲米
km表示單位爲千米
mi表示單位爲英里
ft表示單位爲英尺
如果用戶沒有顯示指定單位參數,默認使用米作爲單位。
GEODIST命令在計算距離時會假設地球爲完美球形,極限情況下,這一假設最大會造成0.5%的誤差。
GEOHASH
最早可用版本:3.2.0
時間複雜度:O(log(N))
返回一個或多個元素位置的Geohash表示。
用法:GEOHASH key member [member …]
返回一個或多個位置元素的Geohash表示。
通常,Redis使用Geohash技術的變體表示元素的位置,位置使用52位整數進行編碼。由於編碼和解碼過程的初始最大和最小座標不同,所以編碼也不是標準的編碼方式。
該命令返回11個字符的Geohash字符串,和內部的52位表示方法相比沒有精度的損失。返回的Geohash有以下屬性:
它可以移除右邊的字符以縮短長度,這隻會導致精度的損失,但仍指向同一區域
它可以在heohash.org網站使用,地址是http://geohash.org/
前綴相似的字符串指向的位置離得很近,但這不代表前綴不同的字符串就離得很遠
GEOPOS
最早可用版本:3.2.0
時間複雜度:O(log(N))
用法:GEOPOS key member [member …]
返回指定key中的指定位置信息。
GEORADIUS
最早可用版本:3.2.0
時間複雜度:O(N+log(M)),N是半徑區域內元素數量,M是指定key中元素數量
用法:GEORADIUS key longitude latitude radiusm|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH][COUNT count] [ASC|DESC] [STORE key][STOREDIST key]
以給定經緯度爲中心,返回鍵包含的位置元素與中心距離不超過最大距離的所有位置元素。
命令額外選項:
WITHDIST:在返回位置元素的同時,將位置元素與中心的距離也一併返回,單位與用戶給定距離的單位一直
WITHCOORD:將位置元素的經度和緯度也一併返回
WITHHASH:以52位有符號整數的形式,返回位置元素經過原始geohash編碼的有序集合分值。這個選項主要用於底層應用或調試。
命令默認返回結果未排序,可以指定ASC或DESC按距離排序。
COUNT表示指定返回元素的數量,如果不指定則返回全部符合的元素。
當GEORADIUS和GEORADIUSBYMEMBER命令有了STORE和STOREDIST參數時,這兩命令被標記成了寫命令。在集羣中,如果設置了READONLY,它們將被重定向到主節點,即使它們沒有做寫操作。但爲了解決這個問題,在Redis4.0引入了這兩個命令的變種,分別是GEORADIUS_RO和GEORADIUSBYMEMBER_RO。
GEORADIUSBYMEMBER
最早可用版本:3.2.0
時間複雜度:O(N+log(M)),N是半徑區域內元素數量,M是指定key中元素數量
用法:GEORADIUSBYMEMBER key member radiusm|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH][COUNT count] [ASC|DESC] [STORE key][STOREDIST key]
這個命令和GEORADIUS命令一樣,都可以找出位置範圍內的元素,但指定中心點的方式不同,該命令直接指定key中的元素作爲中心,而不像GEORADIUS一樣指定經緯度。