<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用Redis完成微信搖一搖功能

        來源:懂視網 責編:小采 時間:2020-11-09 06:53:28
        文檔

        使用Redis完成微信搖一搖功能

        使用Redis完成微信搖一搖功能:Redis提供了地理位置信息(GEO)功能,有了他就可以完成附近的人、搖一搖等功能。首先,介紹下GEO的相關API。GEO API添加地址位置信息geoadd key longitude latitude member [longitude latitude member ...]longitude :經度
        推薦度:
        導讀使用Redis完成微信搖一搖功能:Redis提供了地理位置信息(GEO)功能,有了他就可以完成附近的人、搖一搖等功能。首先,介紹下GEO的相關API。GEO API添加地址位置信息geoadd key longitude latitude member [longitude latitude member ...]longitude :經度

        Redis提供了地理位置信息(GEO)功能,有了他就可以完成附近的人、搖一搖等功能。首先,介紹下GEO的相關API。

        GEO API

        添加地址位置信息

        geoadd key longitude latitude member [longitude latitude member ...]

      1. longitude :經度

      2. latitude :緯度

      3. member :成員

      4. 該命令可以一次添加一個或多個成員

        有一些用戶,都在合肥,現在把他們的地理坐標都存放在Redis里。

      5. 小A在家里看電視,他家的坐標為:117.230279,31.81676

      6. 小B在公司加班,公司的坐標為:117.229704,31.824676

      7. 小C在出差,他出差的地址坐標為:117.300419,31.696095

      8. 小D在家帶娃,他家的地址坐標為:117.192909,31.732465

      9. 小E還在上學,他學校地址坐標為:117.189604,31.838297

      10. 127.0.0.1:6379> geoadd location 117.230279 31.81676 a 117.229704 31.824676 b
        (integer) 2
        127.0.0.1:6379> geoadd location 117.300419 31.696095 c
        (integer) 1
        127.0.0.1:6379> geoadd location 117.192909 31.732465 d
        (integer) 1
        127.0.0.1:6379> geoadd location 117.189604 31.838297 e
        (integer) 1

        獲取兩個地點的距離

        geodist key member1 member2 [unit]

        unit有四個單位

      11. 'm' => 米

      12. 'km' => 千米

      13. 'mi' => 英里

      14. 'ft' => 尺

      15. 我們主要會用到米以及千米。

        現在我們來看看小A和小B之間的距離

        127.0.0.1:6379> GEODIST location a b km
        "0.8821"

        可以看到小A和小B之間有0.88千米

        再來看看小C和小E之間的距離

        127.0.0.1:6379> GEODIST location c e km
        "18.9728"

        他們之間相差將近19千米。

        獲取地址位置信息

        geopos key member [member ...]

        來看下小D的所在地址的經緯度信息

        127.0.0.1:6379> geopos location d
        1) 1) "117.19290822744369507"
         2) "31.73246441933707018"

        獲取指定位置范圍內的地理信息位置集合

        georadius key longitude latitude radiusm km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key] georadiusbymember key member radiusm km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]

        這兩個命令相比其他的稍顯復雜。我們一起來看看這兩個命令。

        這兩個命令功能基本相似,主要的區別是,第一個命令給出的是具體的經緯度,而第二個命令則只給出了成員名。比如,我想知道成員離合肥大蜀山的距離,因為大蜀山經緯度信息還沒有存放在redis中,所以,我們就需要用第一條命令,將大蜀山的經緯度輸入即可。又如,其他成員離小A所在坐標的距離,那么就可以使用第二條命令,直接輸入成員小A即可。

        radiusm 及后面的單位是必填信息,指定在半徑距離多少范圍內搜索。

        合肥大蜀山的坐標是117.175571,31.846746

        # 查看離大蜀山10km的成員有哪些
        127.0.0.1:6379> GEORADIUS location 117.175571 31.846746 10 km
        1) "e"
        2) "a"
        3) "b"

        可以看到小e、小a及小b離大蜀山比較近,在10km內。

        WITHCOORD: 將位置元素的經度和維度也一并返回

        127.0.0.1:6379> GEORADIUS location 117.175571 31.846746 10 km withcoord
        1) 1) "e"
         2) 1) "117.18960374593734741"
         2) "31.83829663190295634"
        2) 1) "a"
         2) 1) "117.23027676343917847"
         2) "31.81675910621205361"
        3) 1) "b"
         2) 1) "117.22970277070999146"
         2) "31.8246750403926697"

        可以看到,除了給出了成員外,成員的位置信息頁一并給出了

        withdist:返回結果中包含離中心節點位置的距離

        127.0.0.1:6379> GEORADIUS location 117.175571 31.846746 10 km withcoord withdist
        1) 1) "e"
         2) "1.6252"
         3) 1) "117.18960374593734741"
         2) "31.83829663190295634"
        2) 1) "a"
         2) "6.1522"
         3) 1) "117.23027676343917847"
         2) "31.81675910621205361"
        3) 1) "b"
         2) "5.6737"
         3) 1) "117.22970277070999146"
         2) "31.8246750403926697"

        可以看到小E離大蜀山1.62千米,小A離大蜀山6.15千米,小B離大蜀山5.67千米。

        withhash:這個命令可以忽略不看,基本用不上

        COUNT count:指定返回結果的數量。

        asc|desc:返回結果按照離中心節點的距離做升序或者降序。

        storedist key:將返回結果離中心節點的距離保存到指定鍵。

        # 獲取離大蜀山100km內范圍的成員,按距離的升序,只需給出最近的4個成員即可
        127.0.0.1:6379> GEORADIUS location 117.175571 31.846746 100 km withdist count 4 asc
        1) 1) "e"
         2) "1.6252"
        2) 1) "b"
         2) "5.6737"
        3) 1) "a"
         2) "6.1522"
        4) 1) "d"
         2) "12.8164"

        實戰

        介紹完了上面知識后,就可以來使用php結合redis完成搖一搖找附近的人的功能了。首先,把成員的位置信息給保存下來。

        偽代碼如下:

        function addLocation ($key,$member, $lng, $lat)
        {
         $redis->geoadd($key, $lng, $lat, $member);
        }

        然后,獲取附近的人的信息

        function near (
         $key, 
         $member, 
         $radius, 
         $unit = 'km', 
         $count = 0, 
         $withDist = false, 
         $withcoord = false, 
         $orderby = 'ASC'
        )
        {
         $redis = new Redis();
         $redis->connect('localhost', 6379);
         $options = [$orderby];
         if ($count > 0) {
         $options['count'] = $count;
         }
         if ($withDist) {
         $options[] = 'WITHDIST';
         }
         if ($withcoord) {
         $options[] = 'WITHCOORD';
         }
         $result = $redis->geoRadiusByMember($key, $member, $radius, $unit, $options);
         return $result;
        }

        使用redis可以大大方便開發人員,豐富的API可以完成各種各樣的需求,Redis的使用已經成為程序員必備的技能了。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用Redis完成微信搖一搖功能

        使用Redis完成微信搖一搖功能:Redis提供了地理位置信息(GEO)功能,有了他就可以完成附近的人、搖一搖等功能。首先,介紹下GEO的相關API。GEO API添加地址位置信息geoadd key longitude latitude member [longitude latitude member ...]longitude :經度
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久午夜免费鲁丝片| h在线观看视频免费网站| 免费观看男人免费桶女人视频| 99久久亚洲精品无码毛片| 日本一区二区免费看| 亚洲国产成人私人影院| 99精品在线免费观看| 毛片a级三毛片免费播放| 亚洲精品中文字幕无乱码麻豆| 97免费人妻无码视频| 亚洲伦理中文字幕| 国产又粗又长又硬免费视频| 亚洲AV无码专区国产乱码电影| 两性色午夜免费视频| 成人免费视频88| 久久亚洲中文字幕无码| 99精品视频在线观看免费专区 | 天堂在线免费观看| 在线亚洲97se亚洲综合在线| 国产羞羞的视频在线观看免费 | 亚洲精品视频在线观看免费| 免费国产va视频永久在线观看| 久久久久久毛片免费播放| 国产成人亚洲综合| 亚洲爆乳无码专区www| 亚洲成年人免费网站| 亚洲中文字幕久久无码| 国产美女无遮挡免费网站| 好湿好大好紧好爽免费视频| 国产一区二区三区在线免费| 中国极品美軳免费观看| 亚洲欧洲国产综合| 免费A级毛片无码A∨中文字幕下载| 亚洲精品成人网站在线播放| 成人免费无码精品国产电影| 在线播放免费人成视频网站| 亚洲福利视频网址| 免费人成视频在线观看视频| 蜜芽亚洲av无码一区二区三区| 一本久久a久久精品亚洲| 美女网站免费福利视频|