日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

redis 附近的人_Redis GEO地理位置信息,查看附近的人

發(fā)布時間:2025/3/21 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis 附近的人_Redis GEO地理位置信息,查看附近的人 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在之前的一篇文章《SpringBoot入門教程(五)Java基于MySQL實現(xiàn)附近的人》,我們介紹了Java基于MySQL實現(xiàn)查找附近的人的功能。今天就來研究研究"查找附近的人"的另一個方案,一個基于Redis的方案。

vGEO地理位置

可用版本: >= 3.2.0

地理位置大概提供了6個命令,分別為:

GEOADD

GEODIST

GEOHASH

GEOPOS

GEORADIUS

GEORADIUSBYMEMBER

vGEOADD

1.1 GEOADD概念

將給定的空間元素(緯度、經(jīng)度、名字)添加到指定的鍵里面。 這些數(shù)據(jù)會以有序集合的形式被儲存在鍵里面, 從而使得像 GEORADIUS 和 GEORADIUSBYMEMBER 這樣的命令可以在之后通過位置查詢?nèi)〉眠@些元素。

GEOADD 命令以標準的 x,y 格式接受參數(shù), 所以用戶必須先輸入經(jīng)度, 然后再輸入緯度。 GEOADD 能夠記錄的坐標是有限的: 非常接近兩極的區(qū)域是無法被索引的。 精確的坐標限制由 EPSG:900913 / EPSG:3785 / OSGEO:41001 等坐標系統(tǒng)定義, 具體如下:

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

有效的緯度介于 -85.05112878 度至 85.05112878 度之間。

當用戶嘗試輸入一個超出范圍的經(jīng)度或者緯度時, GEOADD 命令將返回一個錯誤。

1.2 GEOADD命令

時間復(fù)雜度: 每添加一個元素的復(fù)雜度為 O(log(N)) , 其中 N 為鍵里面包含的位置元素數(shù)量。

命令demo:GEOADD key longitude latitude member [longitude latitude member ...]

命令描述:將指定的地理空間位置(緯度、經(jīng)度、名稱)添加到指定的key中。

返回值:添加到sorted set元素的數(shù)目,但不包括已更新score的元素。

1.3 GEOADD示例

vGEODIST

2.1 GEODIST概念

返回兩個給定位置之間的距離。

如果兩個位置之間的其中一個不存在, 那么命令返回空值。

指定單位的參數(shù) unit 必須是以下單位的其中一個:

m 表示單位為米。

km 表示單位為千米。

mi 表示單位為英里。

ft 表示單位為英尺。

如果用戶沒有顯式地指定單位參數(shù), 那么 GEODIST 默認使用米作為單位。

GEODIST 命令在計算距離時會假設(shè)地球為完美的球形, 在極限情況下, 這一假設(shè)最大會造成 0.5% 的誤差。

2.2 GEODIST命令

復(fù)雜度: O(log(N))

命令demo:GEODIST key member1 member2 [unit]

2.3 GEODIST示例

vGEOPOS

3.1 GEOPOS概念

從鍵里面返回所有給定位置元素的位置(經(jīng)度和緯度)。

因為 GEOPOS 命令接受可變數(shù)量的位置元素作為輸入, 所以即使用戶只給定了一個位置元素, 命令也會返回數(shù)組回復(fù)。

GEOPOS 命令返回一個數(shù)組, 數(shù)組中的每個項都由兩個元素組成: 第一個元素為給定位置元素的經(jīng)度, 而第二個元素則為給定位置元素的緯度。 當給定的位置元素不存在時, 對應(yīng)的數(shù)組項為空值。

3.2 GEOPOS命令

時間復(fù)雜度: 獲取每個位置元素的復(fù)雜度為 O(log(N)) , 其中 N 為鍵里面包含的位置元素數(shù)量。

命令demo:GEOPOS key member [member ...]

3.2 GEOPOS示例

vGEOHASH

4.1 GEOHASH概念

返回一個或多個位置元素的 Geohash 表示。

返回值:一個數(shù)組, 數(shù)組的每個項都是一個 geohash 。 命令返回的 geohash 的位置與用戶給定的位置元素的位置一一對應(yīng)。

4.2 GEOHASH命令

時間復(fù)雜度: 尋找每個位置元素的復(fù)雜度為 O(log(N)) , 其中 N 為給定鍵包含的位置元素數(shù)量。

命令demo:GEOHASH key member [member ...]

命令描述:返回一個或多個位置元素的 Geohash 表示。通常使用表示位置的元素使用不同的技術(shù),使用Geohash位置52點整數(shù)編碼。由于編碼和解碼過程中所使用的初始最小和最大坐標不同,編碼的編碼也不同于標準。此命令返回一個標準的Geohash

4.3 GEOHASH示例

vGEORADIUS

5.1 GEORADIUS概念

以給定的經(jīng)緯度為中心, 返回鍵包含的位置元素當中, 與中心的距離不超過給定最大距離的所有位置元素。

范圍可以使用以下其中一個單位:

m 表示單位為米。

km 表示單位為千米。

mi 表示單位為英里。

ft 表示單位為英尺。

在給定以下可選項時, 命令會返回額外的信息:

WITHDIST : 在返回位置元素的同時, 將位置元素與中心之間的距離也一并返回。 距離的單位和用戶給定的范圍單位保持一致。

WITHCOORD : 將位置元素的經(jīng)度和維度也一并返回。

WITHHASH : 以 52 位有符號整數(shù)的形式, 返回位置元素經(jīng)過原始 geohash 編碼的有序集合分值。 這個選項主要用于底層應(yīng)用或者調(diào)試, 實際中的作用并不大。

命令默認返回未排序的位置元素。 通過以下兩個參數(shù), 用戶可以指定被返回位置元素的排序方式:

ASC : 根據(jù)中心的位置, 按照從近到遠的方式返回位置元素。

DESC : 根據(jù)中心的位置, 按照從遠到近的方式返回位置元素。

在默認情況下, GEORADIUS 命令會返回所有匹配的位置元素。 雖然用戶可以使用 COUNT 選項去獲取前 N 個匹配元素, 但是因為命令在內(nèi)部可能會需要對所有被匹配的元素進行處理, 所以在對一個非常大的區(qū)域進行搜索時, 即使只使用 COUNT 選項去獲取少量元素, 命令的執(zhí)行速度也可能會非常慢。 但是從另一方面來說, 使用 COUNT 選項去減少需要返回的元素數(shù)量, 對于減少帶寬來說仍然是非常有用的。

GEORADIUS 命令返回一個數(shù)組, 具體來說:

在沒有給定任何 WITH 選項的情況下, 命令只會返回一個像 ["New York","Milan","Paris"] 這樣的線性(linear)列表。

在指定了 WITHCOORD 、 WITHDIST 、 WITHHASH 等選項的情況下, 命令返回一個二層嵌套數(shù)組, 內(nèi)層的每個子數(shù)組就表示一個元素。

在返回嵌套數(shù)組時, 子數(shù)組的第一個元素總是位置元素的名字。 至于額外的信息, 則會作為子數(shù)組的后續(xù)元素, 按照以下順序被返回:

以浮點數(shù)格式返回的中心與位置元素之間的距離, 單位與用戶指定范圍時的單位一致。

geohash 整數(shù)。

由兩個元素組成的坐標,分別為經(jīng)度和緯度。

5.2 GEORADIUS命令

時間復(fù)雜度: O(N+log(M)), 其中 N 為指定半徑范圍內(nèi)的位置元素數(shù)量, 而 M 則是被返回位置元素的數(shù)量。

命令demo:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

5.3 GEORADIUS示例

vGEORADIUSBYMEMBER

6.1 GEORADIUSBYMEMBER概念

這個命令和 GEORADIUS 命令一樣, 都可以找出位于指定范圍內(nèi)的元素, 但是 GEORADIUSBYMEMBER 的中心點是由給定的位置元素決定的, 而不是像 GEORADIUS 那樣, 使用輸入的經(jīng)度和緯度來決定中心點。

時間復(fù)雜度: O(log(N)+M), 其中 N 為指定范圍之內(nèi)的元素數(shù)量, 而 M 則是被返回的元素數(shù)量。

6.2 GEORADIUSBYMEMBER命令

命令:GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

6.3 GEORADIUSBYMEMBER示例

vSpingboot中使用方法

RedisTemplate redisTemplate;

redisTemplate.opsForGeo().geoAdd()

redisTemplate.opsForGeo().geoDist()

redisTemplate.opsForGeo().geoHash()

redisTemplate.opsForGeo().geoPos()

redisTemplate.opsForGeo().geoRadius()

redisTemplate.opsForGeo().geoRadiusByMember()

v源碼地址

作  者:http://www.cnblogs.com/toutou/

關(guān)于作者:專注于基礎(chǔ)平臺的項目開發(fā)。如有問題或建議,請多多賜教!

版權(quán)聲明:本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。

特此聲明:所有評論和私信都會在第一時間回復(fù)。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我

聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下。您的鼓勵是作者堅持原創(chuàng)和持續(xù)寫作的最大動力!

總結(jié)

以上是生活随笔為你收集整理的redis 附近的人_Redis GEO地理位置信息,查看附近的人的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。