本文**:
發表於 2016-03-28
| 分類於 redis
redis3.2發布rc版本已經有一段時間了,估計redisconf 2016左右,3.2版本就能release了。3.2版本中增加的最大功能就是對geo(地理位置)的支援。說起redis的geo特性,最大的貢獻還是咱們中國人。redis作者在對3.2引進新特性的部落格中介紹了為什麼支援geo。geo hashing的api是在ardb實現的,ardb是github使用者yinqiwen實現的基於redis協議實現的nosql系統,ardb支援除了redis、還有leveldb、rocksdb
、lmdb等kv引擎。其中ardb實現了geo hashing功能。從ardb作者的使用者名稱和標識的位置在深圳可以看出ardb作者應該是咱中國人。ardb是用c++寫的。redis另乙個開發者matt stancliff從ardb提取geo庫,用c語言改寫,整合進redis的乙個自己的分支,並被redis作者接受,合併進了3.2版本。geo目前提供以下6個命令。
地理位置的座標是以wgs84為標準,wgs84,全稱world geodetic system 1984,是為gps全球定位系統使用而建立的座標系統。
下面來看看具體每個命令的用法。
geoadd用來增加地理位置的座標,可以批量新增地理位置,命令格式為:
geoadd key longitude latitude member [longitude latitude member ...]
key標識乙個地理位置的集合。longitude latitude member
標識了乙個地理位置的座標。longitude是地理位置的經度,latitude是地理位置的緯度。member是該地理位置的名稱。geoadd可以批量給集合新增一批地理位置。
geopos可以獲取地理位置的座標,可以批量獲取多個地理位置的座標,命令格式為:
geopos key member [member ...]
geodist用來獲取兩個地理位置的距離,命令格式為:
geodist key member1 member2 [m|km|ft|mi]
單位可以指定為以下四種型別:
georadius可以根據給定地理位置座標獲取指定範圍內的地理位置集合。命令格式為:
georadius key longitude latitude radius [m|km|ft|mi] [withcoord] [withdist] [asc|desc] [withhash] [count count]
longitude latitude
標識了地理位置的座標,radius表示範圍距離,距離單位可以為m|km|ft|mi,還有一些可選引數:
georadiusbymember可以根據給定地理位置獲取指定範圍內的地理位置集合。georadius命令傳遞的是座標,georadiusbymember傳遞的是地理位置。georadius更為靈活,可以獲取任何座標點範圍內的地理位置。但是大多數時候,只是想獲取某個地理位置附近的其他地理位置,使用georadiusbymember則更為方便。georadiusbymember命令格式為(命令可選引數與georadius含義一樣):
georadiusbymember key member radius [m|km|ft|mi] [withcoord] [withdist] [asc|desc] [withhash] [count count]
geohash可以獲取某個地理位置的geohash值。geohash是將二維的經緯度轉換成字串hash值的演算法,後面會具體介紹geohash原理。可以批量獲取多個地理位置的geohash值。命令格式為:
geohash key member [member ...]
redis geo實現主要包含了以下兩項技術:
geohash的思想是將二維的經緯度轉換成一維的字串,geohash有以下三個特點:
這三個特性讓geohash特別適合表示二維hash值。這篇文章:geohash核心原理解析詳細的介紹了geohash的原理,想要了解geohash實現的朋友可以參考這篇文章。
redis關於geohash使用了ardb的geohash庫geohash-int
,redis使用的geohash編碼長度為26位。可以精確到0.59m的精度。
通過本文,撥開geo身後的雲霧,可以看出redis借助了有序集合(zset)和geohash,加上redis本身實現的命令框架,可以很容易的實現地理位置相關的命令。
redis3 2新功能 GEO地理位置命令介紹
redis3.2發布rc版本已經有一段時間了,估計redisconf 2016左右,3.2版本就能release了。3.2版本中增加的最大功能就是對geo 地理位置 的支援。說起redis的geo特性,最大的貢獻還是咱們中國人。redis作者在對3.2引進新特性的部落格中介紹了為什麼支援geo。ge...
Redis地理演算法GEO解析和應用
獲取周邊資訊 附近人?附近的公司?附近的餐廳?附近的星巴克?獲取兩個座標位置的距離?可以使用redis mongo mysql進行座標檢索換算實現,redis適用版本 3.2.0 redis使用通用的geohash演算法進行處理,首先假設有上海站座標 121.455708,31.249574 然後根...
linux系統上面安裝redis 3 2
redis 3.2 最新的穩定版本 安裝前需要先檢查作業系統是否安裝 gcc環境,rpm qa grep gcc 如果沒有就使用 yum y install gcc 來安裝。安裝好後,將 redis 安裝包解壓到 usr local下面 tar xzf redis 3.2.0.tar.gz c us...