欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Redis中的GEO地理位置模塊怎么用

這篇文章主要介紹了redis中的GEO地理位置模塊怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了臺(tái)州免費(fèi)建站歡迎大家使用!

GEO是 Redis 在3.2版本之后新增的地理位置模塊,意味可以用 Redis 來(lái)實(shí)現(xiàn)附近的地點(diǎn)功能?!鞠嚓P(guān)推薦:Redis視頻教程】

用數(shù)據(jù)庫(kù)計(jì)算

Redis中的GEO地理位置模塊怎么用

一般的方法都是通過(guò)矩形區(qū)域來(lái)限定元素的數(shù)量,然后對(duì)區(qū)域內(nèi)的元素進(jìn)行全量距離計(jì)算再排序。這樣可以明顯減少計(jì)算量。

select id from positions where x0-r < x < x0+r and y0-r < y < y0+r

以上SQL為了增加性能,需要在經(jīng)緯度坐標(biāo)加上雙向復(fù)合索引。 但是數(shù)據(jù)庫(kù)查詢性能畢竟有限,如果在高并發(fā)場(chǎng)合,這可能并不是一個(gè)很好的方案。

GEO算法

  • 業(yè)界比較通用的地理位置距離排序算法是 GeoHash 算法,Redis 也使用 GeoHash 算法。

  • GeoHash 算法將 二維的經(jīng)緯度數(shù)據(jù)映射到一維的整數(shù),這樣所有的元素都將在掛載到一條線上,距離靠近的二維坐標(biāo)映射到一維后的點(diǎn)之間距離也會(huì)很接近。當(dāng)我們想要計(jì)算「附近的人時(shí)」,首先將目標(biāo)位置映射到這條線上,然后在這個(gè)一維的線上獲取附近的點(diǎn)就行了。

  • 算法實(shí)現(xiàn),它將整個(gè)地球看成一個(gè) 二維平面,然后劃分成了一系列正方形的方格,就好比圍棋棋盤。所有的地圖元素坐標(biāo)都將放置于唯一的方格中。方格越小,坐標(biāo)越精確。然后對(duì)這些方格進(jìn)行整數(shù)編碼,越是靠近的方格編碼越是接近。

  • 編碼之后,每個(gè)地圖元素的坐標(biāo)都將變成一個(gè)整數(shù),通過(guò)這個(gè)整數(shù)可以還原出元素的坐標(biāo),整數(shù)越長(zhǎng),還原出來(lái)的坐標(biāo)值的損失程度就越小。

  • GeoHash 算法會(huì)繼續(xù)對(duì)這個(gè)整數(shù)做一次 base32 編碼 (0-9,a-z 去掉 a,i,l,o 四個(gè)字母) 變成一個(gè)字符串。

  • 在 Redis 里面,經(jīng)緯度使用 52 位的整數(shù)進(jìn)行編碼,放進(jìn)了 zset 里面,zsetvalue 是元素的 keyscoreGeoHash 的 52 位整數(shù)值。

  • 在使用 Redis 進(jìn)行 Geo 查詢時(shí),我們要時(shí)刻想到它的內(nèi)部結(jié)構(gòu)實(shí)際上只是一個(gè) zset(skiplist)。通過(guò) zsetscore 排序就可以得到坐標(biāo)附近的其它元素 (實(shí)際情況要復(fù)雜一些,不過(guò)這樣理解足夠了),通過(guò)將 score 還原成坐標(biāo)值就可以得到元素的原始坐標(biāo)。

Redis GEO指令

Redis中的GEO地理位置模塊怎么用

1. 增加 geoadd

geoadd key longitude latitude member [longitude latitude member ...]
127.0.0.1:6379> geoadd beijing 116.403856 39.924043 gugong
(integer) 1
127.0.0.1:6379> geoadd beijing 116.343620 39.947633 dongwuyuan
(integer) 1
127.0.0.1:6379> geoadd beijing 116.328643 39.900272 xizhan 116.415324 39.931231 meishuguan 116.416852 39.887607 tiantan
(integer) 3

刪除用 zset 的 zrem 即可

2. 距離 geodist

geodist key member1 member2 [unit]
127.0.0.1:6379> geodist beijing gugong xizhan km
"6.9402"
127.0.0.1:6379> geodist beijing gugong dongwuyuan   # 默認(rèn)單位m
"5768.5737"
127.0.0.1:6379> geodist beijing xizhan xizhan
"0.0000"

距離單位可以是 m、km、ml、ft,分別代表米、千米、英里和尺。

3. 位置 geopos

geopos key member [member ...]
127.0.0.1:6379> geopos beijing gugong
1) 1) "116.4038559794426"
   2) "39.92404192186725"
127.0.0.1:6379> geopos beijing tiantan xizhan
1) 1) "116.41685396432877"
   2) "39.887607839922914"
2) 1) "116.32864147424698"
   2) "39.900271306834973"

4. hash值 geohash

geohash key member [member ...]
127.0.0.1:6379> geohash beijing gugong
1) "wx4g0gfwqk0"

經(jīng)緯度字符串編碼是 base32 編碼,可以通過(guò) http://geohash.org/wx4g0gfwqk0 直接查找經(jīng)緯度

5. 附近地點(diǎn) georadiusbymember

1、查詢 ireader 范圍 20 公里以內(nèi)最多 3 個(gè)元素按距離正排,它不會(huì)排除自身(倒排使用用 desc

127.0.0.1:6379> georadiusbymember company ireader 20 km count 3 asc
1) "ireader"
2) "juejin"
3) "meituan"

2、三個(gè)可選參數(shù) withcoord withdist withhash 用來(lái)攜帶附加參數(shù), withdist 很有用,它可以用來(lái)顯示距離

georadiusbymember key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DES]
127.0.0.1:6379> georadiusbymember beijing gugong 5 km withcoord withdist withhash count 3 asc
1) 1) "gugong"
   2) "0.0000"
   3) (integer) 4069885568932443
   4) 1) "116.4038559794426"
      2) "39.92404192186725"
2) 1) "meishuguan"
   2) "1.2634"
   3) (integer) 4069885710390435
   4) 1) "116.41532510519028"
      2) "39.93123039107514"
3) 1) "tiantan"
   2) "4.2014"
   3) (integer) 4069885398502557
   4) 1) "116.41685396432877"
      2) "39.887607839922914"

3、根據(jù)坐標(biāo)值來(lái)查詢附近的元素

 georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DES]
127.0.0.1:6379> georadius beijing 116.383882 39.922061 5 km withcoord withdist withhash count 3 asc
1) 1) "gugong"
   2) "1.7180"
   3) (integer) 4069885568932443
   4) 1) "116.4038559794426"
      2) "39.92404192186725"
2) 1) "meishuguan"
   2) "2.8693"
   3) (integer) 4069885710390435
   4) 1) "116.41532510519028"
      2) "39.93123039107514"
3) 1) "dongwuyuan"
   2) "4.4588"
   3) (integer) 4069879836419688
   4) 1) "116.34361892938614"
      2) "39.94763257169722"

注意事項(xiàng)

實(shí)際應(yīng)用中數(shù)據(jù)可能會(huì)有百萬(wàn)千萬(wàn)條,我們知道 Redis Geo 將全部放在一個(gè) zset 集合中。在 Redis 的集群環(huán)境中,集合可能會(huì)從一個(gè)節(jié)點(diǎn)遷移到另一個(gè)節(jié)點(diǎn),如果單個(gè) key 的數(shù)據(jù)過(guò)大,會(huì)對(duì)集群的遷移工作造成較大的影響,在集群環(huán)境中單個(gè) key 對(duì)應(yīng)的數(shù)據(jù)量不宜超過(guò) 1M,否則會(huì)導(dǎo)致集群遷移出現(xiàn)卡頓現(xiàn)象,影響線上服務(wù)的正常運(yùn)行。

所以,這里建議 Geo 的數(shù)據(jù)使用單獨(dú)的 Redis 實(shí)例部署,不使用集群環(huán)境。

如果數(shù)據(jù)量過(guò)億甚至更大,就需要對(duì) Geo 數(shù)據(jù)進(jìn)行拆分,按國(guó)家拆分、按省拆分,按市拆分,在人口特大城市甚至可以按區(qū)拆分。這樣就可以顯著降低單個(gè) zset 集合的大小。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Redis中的GEO地理位置模塊怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

當(dāng)前文章:Redis中的GEO地理位置模塊怎么用
網(wǎng)頁(yè)網(wǎng)址:http://aaarwkj.com/article48/gojhhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)網(wǎng)站收錄、App開發(fā)、建站公司手機(jī)網(wǎng)站建設(shè)、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
欧美欧美欧美欧美一二三区| 国产福利午夜一区二区| 一区二区人妻乳中文字幕| 在线成人免费日韩视频| av黄色成人在线观看| 亚洲精品在线观看日本| 国产91极品尤物白丝美女| 国产精品国产三级国产不卡| 青青草免费在线视频蜜臀| 久久久精品国产亚洲av日韩| 无套内射精品一区二区| 午夜福利成人在线免费观看| 亚洲精品一区二区av| 亚洲国产精品性色av| 国产色视频一区在线观看| 在线免费观看视频97| 人妻伦理一区二区三区| 国产精品一区二区三区国产| 婷婷色悠悠,色悠悠激情啪啪| 国产高清不卡午夜福利| 夫妻性生活免费的视频| 亚洲精品隔壁傲慢人妻| 国产视频不卡一区二区| 美女高潮呻吟免费观看久久久| 97免费人妻在线视频| 日本人妻在线一区二区三区| 水蜜桃成人在线视频免费观看| 国产亚洲一区二区日韩欧美| 亚洲国产日韩欧美在线播放| 亚洲乱色熟女一区二区三区麻豆| 周妍希浴室视频色哟哟| 国产精品亚洲av三区国产毛片| 久久伊人69日韩精品| 日韩欧美午夜福利在线视频| 白白色发布青青在线视频观看| 国产一级av在线播放| 国产三级在线视频不卡| 日韩 高清 一区二区| 亚洲av日韩高清在线观看| 6080yy精品一区二区三区| 激情五月,开心五月深情五月|