Redis命令詳解:Geo

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有以下屬性:

  1. 它可以移除右邊的字符以縮短長度,這隻會導致精度的損失,但仍指向同一區域

  2. 它可以在heohash.org網站使用,地址是http://geohash.org/

  3. 前綴相似的字符串指向的位置離得很近,但這不代表前綴不同的字符串就離得很遠

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一樣指定經緯度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章