前言:
這兩天回顧了下之前做的一個(gè)輕度社交小程序,代碼寫的真tm糙hah.另外發(fā)現(xiàn)附近人功能使用的redis-GEO竟然沒落文檔..,所以在這里補(bǔ)充一下.地理位置管理神器,codeMan奉上
1.概念
redis的GEO特性最早是在2014年初以redis模塊形式編寫,2016年官方二次修改后發(fā)布。
redis的GEO特性為Redis3.2版本版本添加的新特性
redis的GEO特性可以將用戶給定的地理位置存儲起來,并對這些信息進(jìn)行操作。
redis的GEO特性底層實(shí)現(xiàn)為zset(記憶)
3.GEO相關(guān)命令
1.命令:GEOADD
-
參數(shù):
key : 地理位置集
longitude: 經(jīng)度
latitude: 維度
member: 成員
-
語法:
- GEOADD key longitude latitude member [longitude latitude member
-
功能:
- 將給定的空間元素(經(jīng)度、維度)和成員添加到指定的地理位置(key)集里面
-
返回值:
- 如果成員是新成員,則為1;如果成員是更新成員,則為0
-
說明:
有效的經(jīng)度介于-180度至180度之間。
有效的維度介于-85.05112878度至85.05112878度之間。
此方法可以一次添加多個(gè)成員
-
示例:
- 添加
添加天安門位置.png-
修改
修改天安門位置.png 添加多個(gè)成員
添加天壇和故宮位置.png
2.命令:GEOPOS
-
參數(shù):
key : 地理位置集
member: 成員
-
語法:
- GEOPOS key member [member
-
功能:
- 從地理位置集里面返回所有給定位置元素的位置信息(經(jīng)度和維度)
-
返回值:
-
指定成員的位置信息排列如下
- 經(jīng)度
- 維度
-
-
示例:
- 查詢單個(gè)成員
查詢天安門位置.png- 查詢多個(gè)成員
查詢天壇和故宮位置.png
3.命令:GEODIST
-
參數(shù):
key : 地理位置集
member: 成員
unit:指定單位
-
語法:
- GEOPOS key member1 member2 [unit]
-
功能:
- 返回兩給定成員之間的距離
-
說明:
如果兩個(gè)位置之間的其中一個(gè)不存在,那么返回空值。
指定單位的參數(shù)unit必須是一下單位的其中一個(gè):(默認(rèn)m,km,mi,ft)
-
返回值:
- 計(jì)算出的距離會以雙精度浮點(diǎn)數(shù)的形式被返回。如果給定的位置元素不存在,那么命令返回空值
-
示例:
- 距離計(jì)算-不指定unit
天壇與故宮距離(單位M).png- 距離計(jì)算-指定unit為KM
天壇與故宮距離(單位KM).png- 其中一個(gè)成員不存在

4.命令GEORADIUS
-
參數(shù):
key : 地理位置集
longitude: 當(dāng)前經(jīng)度
latitude: 當(dāng)前維度
radius:半徑
m|km|gt|mi:單位
[WITHCOORD]:將成員的經(jīng)度和緯度也一并返回。
[WITHDIST]:在返回成員的同時(shí),將位置元素與中心之間的距離也一并返回。
[WITHHASH]:以52位有符號整數(shù)的形式,返回成員經(jīng)過原始geohash編碼的有序集合分值。這個(gè)選項(xiàng)主要用于底層應(yīng)用或者調(diào)試,實(shí)際中的作用并不大。
[ASC|DESC] :根據(jù)中心的位置,按照從[近到遠(yuǎn)|遠(yuǎn)到近]的方式返回位置元素
-
語法:
- GEORADIUS key longitude latitude radius m|km|gt|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [WITHGEOJSON]
-
返回值:
以給定的經(jīng)緯度為中心,返回地理位置集中與中心的距離不超過給定最大半徑的所有用戶.
-
示例:
- 添加全部參數(shù)-近到遠(yuǎn)排列
georadius.png-
圖解
- 1)成員
2)距離
3)52位有符號整數(shù)
4)成員位置經(jīng)度
5)成員位置維度
5.命令:GEORADIUSBYMEMBER
-
說明:
這個(gè)命令和georadius命令一樣,都可以找出位于指定半徑內(nèi)的成員,但是georadiusbymember的中心點(diǎn)是由給定的成員決定的,而不是像georadius那樣,使用輸入的經(jīng)度和緯度來決定中心點(diǎn)。
返回值中同樣包含中心點(diǎn)成員本身.
-
特殊參數(shù)(相對georadius)
- member: 成員
-
語法:
- GEORADIUSBYMEMBER key longitude latitude radius m|km|gt|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [WITHGEOJSON]
-
示例:
- 添加全部參數(shù)-遠(yuǎn)到近排列
georadiusbymember.png
6.刪除成員命令
-
說明:
- GEO沒有提供刪除成員的命令,但是因?yàn)镚EO的底層實(shí)現(xiàn)是zset,所以可以借用zrem命令實(shí)現(xiàn)對地理位置信息的刪除.
-
語法:
- ZREM key member [member ...]
-
返回值:
- 刪除成員個(gè)數(shù)
-
示例:
- 刪除一個(gè)成員
刪除天安門.png- 刪除多個(gè)成員
刪除故宮和天壇.png
寫在后面
Redis-GEO底層是無序集合結(jié)構(gòu),這個(gè)結(jié)構(gòu)對后端開發(fā)的功能超級友好.排行榜等類似的功能也可以用它來實(shí)現(xiàn).喜歡redis










