日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

筆者之前文章介紹過geohash算法,那么今天,我們來講一下redis的geo功能。

用Redis實現搜索附近人的功能——geohash算法的使用

GeoHash與Z階曲線的關系

1 引言

“附近的人”在社交類App已成為標配的功能,簡單一點的實現方式可以把坐標存至關系型數據庫,通過計算的坐標點距離實現,這種計算可行但計算速度遠不及內存操作級別的NoSql數據庫。基于Redis的geo就可以輕松實現。

2 Redis處理位置坐標點的思路

Redis中經緯度使用52位的整數進行編碼,放進zset中,zset的value元素是key,score是GeoHash的52位整數值。在使用Redis進行Geo查詢時,其內部對應的操作其實只是zset(skiplist)的操作。通過zset的score進行排序就可以得到坐標附近的其它元素,通過將score還原成坐標值就可以得到元素的原始坐標。

Redis中處理這些地理位置坐標點的思想是: 二維平面坐標點 --> 一維整數編碼值 --> zset(score為編碼值) --> zrangebyrank(獲取score相近的元素)、zrangebyscore --> 通過score(整數編碼值)反解坐標點 --> 附近點的地理位置坐標。

3 redis GEO的使用

Geo指令,底層是普通的zset結構,提供6個命令。

3.1 geoadd

用Redis實現搜索附近人的功能——geohash算法的使用

 

3.2 geodist

用Redis實現搜索附近人的功能——geohash算法的使用

 

3.3 geopos

用Redis實現搜索附近人的功能——geohash算法的使用

 

GeoHash對二維經緯度坐標進行一維映射是有損的,通過映射再還原回的經緯度坐標和原始輸入的經緯度坐標存在一定的誤差。

3.4 geohash

用Redis實現搜索附近人的功能——geohash算法的使用

 

3.5 georadiusbymember : 查詢指定元素附近的其它元素

用Redis實現搜索附近人的功能——geohash算法的使用

 

3.6 georadius

用Redis實現搜索附近人的功能——geohash算法的使用

 

4 Redis Geo使用注意事項

在一個地圖應用中,車的數據、餐館的數據、人的數據可能會有百萬千萬條,如果使用 Redis 的 Geo 數據結構,它們將全部放在一個 zset 集合中。在 Redis 的集群環境中,集合可能會從一個節點遷移到另一個節點,如果單個 key 的數據過大,會對集群的遷移工作造成較大的影響,在集群環境中單個 key 對應的數據量不宜超過 1M,否則會導致集群遷移出現卡頓現象,影響線上服務的正常運行。

所以,這里建議 Geo 的數據使用單獨的 Redis 實例部署,不使用集群環境。

如果數據量過億甚至更大,就需要對 Geo 數據進行拆分,按國家拆分、按省拆分,按市拆分,在人口特大城市甚至可以按區拆分。這樣就可以顯著降低單個 zset 集合的大小。(注意:zset集合大小,進行合適地切分)。

分享到:
標簽:算法 geohash
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定