地理位置管理神器redis-GEO

前言:

這兩天回顧了下之前做的一個(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)度和維度)
  • 返回值:

    • 指定成員的位置信息排列如下

        1. 經(jīng)度
      1. 維度
  • 示例:

    • 查詢單個(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è)成員不存在
缺少一個(gè)成員.png

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. 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容