redis 3.2版本中增加的最大功能就是對GEO(地理位置)的支持
當前業務中地圖方面是調用高德api(雲圖),請求多少會有延遲 而redsigeo可以實現查找附近的終端以及測量兩點之間的直線距離(有誤差)
- 1、geoadd:增加某個地理位置的坐標。
- 2、geopos:獲取某個地理位置的坐標。
- 3、geodist:獲取兩個地理位置的距離。
- 4、georadius:根據給定地理位置坐標獲取指定范圍內的地理位置集合。
- 5、georadiusbymember:根據給定地理位置獲取指定范圍內的地理位置集合。
- 6、geohash:獲取某個地理位置的geohash值。
geoadd
geoadd用來增加地理位置的坐標,可以批量添加地理位置,命令格式為:
GEOADD key longitude latitude member [longitude latitude member ...]
key標識一個地理位置的集合。longitude latitude member
標識了一個地理位置的坐標。longitude是地理位置的經度,latitude是地理位置的緯度。member是該地理位置的名稱。GEOADD可以批量給集合添加一批地理位置。
geopos
geopos可以獲取地理位置的坐標,可以批量獲取多個地理位置的坐標,命令格式為:
GEOPOS key member [member ...]
geodist
geodist用來獲取兩個地理位置的距離,命令格式為:
GEODIST key member1 member2 [m|km|ft|mi]
單位可以指定為以下四種類型:
- m:米,距離單位默認為米,不傳遞該參數則單位為米。
- km:公里。
- mi:英里。
- ft:英尺。
georadius
georadius可以根據給定地理位置坐標獲取指定范圍內的地理位置集合。命令格式為:
GEORADIUS key longitude latitude radius [m|km|ft|mi] [WITHCOORD] [WITHDIST] [ASC|DESC] [WITHHASH] [COUNT count]
longitude latitude
標識了地理位置的坐標,radius表示范圍距離,距離單位可以為m|km|ft|mi,還有一些可選參數:
- WITHCOORD:傳入WITHCOORD參數,則返回結果會帶上匹配位置的經緯度。
- WITHDIST:傳入WITHDIST參數,則返回結果會帶上匹配位置與給定地理位置的距離。
- ASC|DESC:默認結果是未排序的,傳入ASC為從近到遠排序,傳入DESC為從遠到近排序。
- WITHHASH:傳入WITHHASH參數,則返回結果會帶上匹配位置的hash值。
- COUNT count:傳入COUNT參數,可以返回指定數量的結果。
georadiusbymember
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值。geohash是將二維的經緯度轉換成字符串hash值的算法,后面會具體介紹geohash原理。可以批量獲取多個地理位置的geohash值。命令格式為:
GEOHASH key member [member ...]