日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
RedisGEO地理位置
在 Redis 3.2 版本中,新增了存儲地理位置信息的功能,即 GEO(英文全稱 geographic),它的底層通過 Redis 有序集合(zset)實現(xiàn)。不過 Redis GEO 并沒有與 zset 共用一套的命令,而是擁有自己的一套命令。

Redis GEO 提供了 6 個常用命令:

  • GEOADD
  • GEOPOS
  • GEODIST
  • GEORADIUS
  • GEORADIUSBYMEMBER
  • GEOHASH

Redis GEO 有很多應(yīng)用場景,舉一個簡單的例子,你一定點(diǎn)過外賣,或者用過打車軟件,在這種 APP上會顯示“店家距離你有多少米”或者“司機(jī)師傅距離你有多遠(yuǎn)”,類似這種功能就可以使用 Redis GEO 實現(xiàn)。數(shù)據(jù)庫中存放著商家所處的經(jīng)緯度,你的位置則由手機(jī)定位獲取,這樣 APP 就計算出了最終的距離。再比如微信中附近的人、搖一搖、實時定位等功能都依賴地理位置實現(xiàn)。

GEO 提供以下操作命令,如下表所示:

Redis GEO命令
序號 命令 說明
1 GEOADD 將指定的地理空間位置(緯度、經(jīng)度、名稱)添加到指定的 key 中。
2 GEOPOS 從 key 里返回所有給定位置元素的位置(即經(jīng)度和緯度)
3 GEODIST 返回兩個地理位置間的距離,如果兩個位置之間的其中一個不存在, 那么命令返回空值。
4 GEORADIUS 根據(jù)給定地理位置坐標(biāo)(經(jīng)緯度)獲取指定范圍內(nèi)的地理位置集合。
5 GEORADIUSBYMEMBER 根據(jù)給定地理位置(具體的位置元素)獲取指定范圍內(nèi)的地理位置集合。
6 GEOHASH 獲取一個或者多個的地理位置的 GEOHASH 值。
7 ZREM 通過有序集合的 zrem 命令實現(xiàn)對地理位置信息的刪除。

1) GEOADD

將指定的地理空間位置(緯度、經(jīng)度、名稱)添加到指定的 key 中。語法格式如下:

GEOADD key longitude latitude member [longitude latitude member ...]    

  • longitude:位置地點(diǎn)所處的經(jīng)度;
  • latitude:位置地點(diǎn)所處的緯度;
  • member:位置名稱。

將給定的經(jīng)緯度的位置名稱(緯度、經(jīng)度、名字)與  key 相對應(yīng),這些數(shù)據(jù)以有序集合的形式進(jìn)行儲存。

GEOADD命令以標(biāo)準(zhǔn)的
x,y形式接受參數(shù), 所以用戶必須先輸入經(jīng)度,然后再輸入緯度。
GEOADD命令能夠記錄的坐標(biāo)數(shù)量是有限的,如果位置非常接近兩極(南極/北極)區(qū)域,那么將無法被索引到。因此當(dāng)您輸入經(jīng)緯度時,需要注意以下規(guī)則:

  • 有效的經(jīng)度介于 -180 度至 180 度之間。
  • 有效的緯度介于 -85.05112878 度至 85.05112878 度之間。

注意:如果您輸入一個超出范圍的經(jīng)緯度時,GEOADD 命令將返回一個錯誤。

示例演示如下:

#添加城市地理位置
127.0.0.1:6379> geoadd city 116.20 39.56 beijing 120.52 30.40 shanghai
(integer) 2
#查詢城市地理位置
127.0.0.1:6379> GEOPOS city beijing shanghai
1) 1) "116.19999736547470093"
   2) "39.56000019952067248"
2) 1) "120.52000075578689575"
   2) "30.39999952668997452"

2) GEODIST

 該命令用于獲取兩個地理位置間的距離。返回值為雙精度浮點(diǎn)數(shù),其語法格式如下:

GEODIST key member1 member2 [unit]   

參數(shù) unit 是表示距離單位,取值如下所示:

  • m 表示單位為米;
  • km 表示單位為千米;
  • mi 表示單位為英里;
  • ft 表示單位為英尺。

注意:如果沒有指出距離單位,那么默認(rèn)取值為
m。示例如下:

127.0.0.1:6379> GEODIST city beijing shanghai
"1091868.8970"
127.0.0.1:6379> GEODIST city beijing shanghai km
"1091.8689"
127.0.0.1:6379> GEODIST city beijing shanghai mi
"678.4576"

注意:計算舉例時存在 0.5% 左右的誤差,這是由于 Redis GEO 把地球假設(shè)成了完美的球體。

3) GEORADIUS

以給定的經(jīng)緯度為中心,計算出 key 包含的地理位置元素與中心的距離不超過給定最大距離的所有位置元素,并將其返回。

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]

參數(shù)說明:

  • WITHDIST :在返回位置元素的同時, 將位置元素與中心之間的距離也一并返回。
  • WITHCOORD :返回位置元素的經(jīng)度和維度。
  • WITHHASH :采用 GEOHASH 對位置元素進(jìn)行編碼,以 52 位有符號整數(shù)的形式返回有序集合的分值,該選項主要用于底層調(diào)試,實際作用不大。
  • COUNT:指定返回位置元素的數(shù)量,在數(shù)據(jù)量非常大時,可以使用此參數(shù)限制元素的返回數(shù)量,從而加快計算速度。

注意:該命令默認(rèn)返回的是未排序的位置元素。通過 ASC 與 DESC 可讓返回的位置元素以升序或者降序方式排列。

命令應(yīng)用示例如下:

#添加幾個地理位置元素
127.0.0.1:6379> GEOADD city 106.45 29.56 chongqing 120.33 36.06 qingdao 103.73 36.03 lanzhou
(integer) 3
127.0.0.1:6379> GEOADD city 106.71 26.56 guiyang
(integer) 1
#以首都的坐標(biāo)為中心,計算各個城市距離首都的距離,最大范圍設(shè)置為1500km
#同時返回距離,與位置元素的經(jīng)緯度
127.0.0.1:6379> GEORADIUS city 116.41 39.91 1500 km WITHCOORD WITHDIST
1) 1) "chongqing"
   2) "1465.5618"
   3) 1) "106.4500012993812561"
      2) "29.56000053864853072"
2) 1) "lanzhou"
   2) "1191.2793"
   3) 1) "103.72999995946884155"
      2) "36.03000049919800318"
3) 1) "shanghai"
   2) "1121.4882"
   3) 1) "120.52000075578689575"
      2) "30.39999952668997452"
4) 1) "qingdao"
   2) "548.9304"
   3) 1) "120.3299984335899353"
      2) "36.05999892411877994"
5) 1) "beijing"
   2) "42.8734"
   3) 1) "116.19999736547470093"
      2) "39.56000019952067248"

4) GEORADIUSBYMEMBER

根據(jù)給定的地理位置坐標(biāo)(即經(jīng)緯度)獲取指定范圍內(nèi)的位置元素集合。其語法格式如下:

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DES]

  • m :米,默認(rèn)單位;
  • km :千米(可選);
  • mi :英里(可選);
  • ft :英尺(可選);
  • ASC:根據(jù)距離將查找結(jié)果從近到遠(yuǎn)排序;
  • DESC:根據(jù)距離將查找結(jié)果從遠(yuǎn)到近排序。

該命令與 GEORADIUS 命令相似,不過它選擇的中心的是具體的位置元素,而非經(jīng)緯度坐標(biāo)。示例如下:

#以貴陽為中心,最大距離不超過900km
127.0.0.1:6379> GEORADIUSBYMEMBER city guiyang 900 km WITHCOORD WITHDIST
1) 1) "guiyang"
   2) "0.0000"
   3) 1) "106.70999854803085327"
      2) "26.56000089385899798"
#只有重慶符合條件
2) 1) "chongqing"
   2) "334.6529"
   3) 1) "106.4500012993812561"
      2) "29.56000053864853072"

5) GEOHASH

返回一個或多個位置元素的哈希字符串,該字符串具有唯一 ID 標(biāo)識,它與給定的位置元素一一對應(yīng)。示例如下:

127.0.0.1:6379> GEOHASH city lanzhou beijing shanghai
1) "wq3ubrjcun0"
2) "wx49h1wm8n0"
3) "wtmsyqpuzd0"

6) ZREM

用于刪除指定的地理位置元素,示例如下:

127.0.0.1:6379> zrem city beijing shanghai
(integer) 2

了解更多命令請參考:http://redisdoc.com/geo/geohash.html


當(dāng)前文章:RedisGEO地理位置
當(dāng)前鏈接:http://m.5511xx.com/article/coeghgd.html