??前言
除了五中基本的數(shù)據(jù)類型外,Redis還支持兩種特殊的數(shù)據(jù)類型,第一種 Geo (地理位置):用于存儲地理位置相關(guān)的數(shù)據(jù),例如經(jīng)緯度、距離等。第二種 Stream (流):是一個高級的列表類型,支持對列表的批量操作,如添加多個元素、獲取多個元素等。
Redis GEO(Geo Redis)是一個用于存儲和操作地理空間數(shù)據(jù)的 Redis 模塊。它提供了一組命令,可以將地理位置數(shù)據(jù)存儲為 Redis 鍵值,并支持各種地理位置查詢和操作。
Redis GEO 可以在需要處理地理位置數(shù)據(jù)的場景中使用,例如近鄰查詢、地理位置路由、基于地理位置的服務(wù)等。使用 Redis GEO 可以高效地處理大量的地理位置數(shù)據(jù),并且可以與其他 Redis 數(shù)據(jù)類型(例如列表、哈希表)結(jié)合使用,以提供更復(fù)雜的地理位置服務(wù)。
??Geo (地理位置?關(guān)命令介紹)
Redis GEO 的常用命令:
- GEODEL:刪除給定位置上的元素。
- GEOADD:向給定位置添加元素。
- GEOPOS:獲取給定元素的經(jīng)緯度。
- GEORADIUS:半徑為 radius 的圓中第一個元素。
- GEORADIUSBYMEMBER:在距離給定元素 radius 距離的圓中查找元素。
- GEOHASH:獲取給定元素的哈希值。?
- GEODIST:獲取兩個元素之間的距離。
??Geo (地理位置 相關(guān)命令操作)
GEOADD (添加地理位置的坐標(biāo))
說明:
geoadd 用于存儲指定的地理空間位置,可以將一個或多個經(jīng)度(longitude)、緯度(latitude)、位置名稱(member)添加到指定的 key 中
語法:
GEOADD key longitude latitude member [longitude latitude member ...]
- key:要添加點的鍵值。
- longitude:要添加點的經(jīng)度。
- latitude:要添加點的緯度。
- member:要添加點的成員屬性,可以根據(jù)需要進行設(shè)置。
示例:
127.0.0.1:6379> GEOADD city 116.403039 39.915351 "beijing" 117.220164 39.095583 "tianjin"
(integer) 2
127.0.0.1:6379> GEODIST city beijing tianjin
"115025.3461"
127.0.0.1:6379> GEORADIUS city 116 39 1000 km
1) "tianjin"
2) "beijing"
127.0.0.1:6379> GEORADIUS city 116 39 200 km
1) "tianjin"
2) "beijing"
127.0.0.1:6379> GEORADIUS city 116 39 120 km
1) "tianjin"
2) "beijing"
127.0.0.1:6379> GEORADIUS city 116 39 100 km
(empty list or set)
127.0.0.1:6379>
該命令(GEOADD city 116.403039 ?39.915351 "beijing" 117.220164 ?39.095583 "tianjin")將beijing和tianjin這兩個點添加到city 這個鍵值下,每個點都由它們的經(jīng)緯度坐標(biāo)和成員屬性"beijing"和"tianjin"組成。
GEOPOS (獲取地理位置的坐標(biāo))
說明:
GEOPOS命令用于獲取一個或多個點的經(jīng)緯度坐標(biāo)。
語法:
GEOPOS key member [member ...]
- key:要獲取點的鍵值。
- member:要獲取點的成員屬性,可以根據(jù)需要進行設(shè)置。
示例:
127.0.0.1:6379> GEOPOS city beijing tianjin nonexistent
1) 1) "116.40304058790206909"
2) "39.91535036301187489"
2) 1) "117.22016483545303345"
2) "39.09558351926427378"
3) (nil)
127.0.0.1:6379>
?該命令將返回beijing 和 tianjin這兩個點的經(jīng)緯度坐標(biāo)。
GEODIST?(計算兩個位置之間的距離)
說明:
GEODIST命令用于計算兩個給定位置之間的距離,以雙精度浮點數(shù)的形式返回。
語法:
GEODIST key member1 member2 [unit]
- key:可以是一個鍵值,但該參數(shù)不是必需的。
- member1:要計算距離的位置1的成員屬性。
- member2:要計算距離的位置2的成員屬性。
- unit:可以指定返回的距離單位,可以是m(米)、km(千米)、mi(英里)或ft(英尺)。
示例:
127.0.0.1:6379> GEODIST city beijing tianjin
"115025.3461"
127.0.0.1:6379> GEODIST city beijing tianjin m
"115025.3461"
127.0.0.1:6379> GEODIST city beijing tianjin km
"115.0253"
127.0.0.1:6379> GEODIST city beijing tianjin mi
"71.4736"
127.0.0.1:6379> GEODIST city beijing tianjin ft
"377379.7446"
127.0.0.1:6379>
?該命令將返回beijing 和 tianjin這兩個點之間的距離,默認(rèn)單位為米。
GEOHASH?(返回一個或多個位置對象的 geohash 值)
說明:
Redis GEO 使用 GEOHASH?來保存地理位置的坐標(biāo)。GEOHASH? 用于獲取一個或多個位置元素的 GEOHASH?值。
語法:
GEOHASH key member [member ...]
- key:可以是一個鍵值,但該參數(shù)不是必需的。
- member1:要計算距離的位置1的成員屬性。
- member2:要計算距離的位置2的成員屬性。
示例:
127.0.0.1:6379> GEOHASH city beijing tianjin
1) "wx4g0f65g20"
2) "wwgq7mjh7b0"
127.0.0.1:6379>
該命令將返回北京和天津這兩個點之間的距離。請注意,您需要提供正確的地理位置信息才能正確使用此命令。
GEORADIUS (根據(jù)用戶給定的經(jīng)緯度坐標(biāo)來獲取指定范圍內(nèi)的地理位置集合)
說明:
根據(jù)用戶給定的經(jīng)緯度坐標(biāo)來獲取指定范圍內(nèi)的地理位置集合。
語法:
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC
- key:要查找的點的鍵值。
- longitude:要查找的點的經(jīng)度。
- latitude:要查找的點的緯度。
- radius:可以設(shè)置半徑的大小,后面需要指定單位,如m、km、ft或mi。
- [WITHCOORD]:如果需要,可以使用WITHCOORD選項來返回包含距離計算的點的經(jīng)緯度坐標(biāo)。
- [WITHDIST]:如果需要,可以使用WITHDIST選項來返回包含距離計算的點的距離。
- [WITHHASH]:如果需要,可以使用WITHHASH選項來返回包含距離計算的點的哈希值。
- [COUNT count]:如果需要,可以使用COUNT count選項來指定返回的距離計算的點的數(shù)量。
- [ASC]:如果需要,可以使用ASC選項來指定按距離升序排列返回的距離計算的點。
示例:
127.0.0.1:6379> GEOADD city 116.403039 39.915351 "beijing" 117.220164 39.095583 "tianjin"
(integer) 2
127.0.0.1:6379> GEORADIUS city 117 39 200 km WITHDIST
1) 1) "tianjin"
2) "21.7878"
2) 1) "beijing"
2) "113.9887"
127.0.0.1:6379> GEORADIUS city 117 39 200 km WITHCOORD
1) 1) "tianjin"
2) 1) "117.22016483545303345"
2) "39.09558351926427378"
2) 1) "beijing"
2) 1) "116.40304058790206909"
2) "39.91535036301187489"
127.0.0.1:6379> GEORADIUS city 117 39 200 km WITHDIST WITHCOORD
1) 1) "tianjin"
2) "21.7878"
3) 1) "117.22016483545303345"
2) "39.09558351926427378"
2) 1) "beijing"
2) "113.9887"
3) 1) "116.40304058790206909"
2) "39.91535036301187489"
GEORADIUSBYMEMBER (在距離給定元素 radius 距離的圓中查找元素)
說明:
GEORADIUSBYMEMBER命令用于計算給定成員屬性在指定半徑范圍內(nèi)的其他點的距離和坐標(biāo)。
語法:
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DES
- key:要查找的點的鍵值。
- member:要查找的點的成員屬性。
- radius:可以設(shè)置半徑的大小,后面需要指定單位,如m、km、ft或mi。
- [WITHCOORD]:如果需要,可以使用WITHCOORD選項來返回包含距離計算的點的經(jīng)緯度坐標(biāo)。
- [WITHDIST]:如果需要,可以使用WITHDIST選項來返回包含距離計算的點的距離。
- [WITHHASH]:如果需要,可以使用WITHHASH選項來返回包含距離計算的點的哈希值。
- [COUNT count]:如果需要,可以使用COUNT count選項來指定返回的距離計算的點的數(shù)量。
- [ASC|DES:如果需要,可以使用ASC選項來指定按距離升序排列返回的距離計算的點,或者使用DES選項來指定按距離降序排列返回的距離計算的點。
示例:
127.0.0.1:6379> GEOADD city 116.403039 39.915351 "beijing" 117.220164 39.095583 "tianjin"
(integer) 2
127.0.0.1:6379> GEORADIUS city 116.403039 39.915351 500 km WITHDIST COUNT 10 ASC
1) 1) "beijing"
2) "0.0002"
2) 1) "tianjin"
2) "115.0255"
舉例:如命令(GEORADIUS city 116.403039 39.915351 500 km WITHDIST COUNT 10 ASC)根據(jù)GEORADIUS命令,計算距離北京市中心(經(jīng)度116.403039,緯度39.915351)200千米范圍內(nèi)其他點的距離,并按照距離升序排列返回最接近的10個點及其距離。文章來源:http://www.zghlxwxcb.cn/news/detail-550082.html
該命令將返回距離北京市中心(經(jīng)度116.403039,緯度39.915351)200千米范圍內(nèi)的其他點,并按照距離升序排列返回最接近的10個點及其距離。文章來源地址http://www.zghlxwxcb.cn/news/detail-550082.html
GEORADIUS 和?GEORADIUS 區(qū)別
- GEORADIUS 以給定的經(jīng)緯度為中心, 返回鍵包含的位置元素當(dāng)中, 與中心的距離不超過給定最大距離的所有位置元素。
- GEORADIUS 和 GEORADIUS 命令一樣, 都可以找出位于指定范圍內(nèi)的元素, 但是 GEORADIUS 的中心點是由給定的位置元素決定的, 而不是使用經(jīng)度和緯度來決定中心點。
到了這里,關(guān)于【Redis】特殊數(shù)據(jù)類型 Geo (地理位置)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!