Redis 三種特殊資料型別

HuDu發表於2020-09-18

朋友的定位,附近的人,叫車距離的計算
Redis的Geo在Redis3.2版本就有了!這個功能可以推算地理位置資訊,兩地之間的距離,方圓幾裡的人!
可以查詢一些測試資料 www.jsons.cn/lngcode/
只有六個命令

Redis 三種特殊資料型別

geoadd

# 新增地理位置
# 規則:兩級無法直接新增,我們一般會下載城市資料,直接通過java程式一次性匯入
# 引數 key 值(緯度、經度、名稱)
# 有效的經度從-180度到180度。
# 有效的緯度從-85.05112878度到85.05112878度。
127.0.0.1:6379[1]> GEOADD china:city 116.405285 39.904989 beijin
(integer) 1
127.0.0.1:6379[1]> GEOADD china:city 121.472644 31.231706 shanghai
(integer) 1
127.0.0.1:6379[1]> GEOADD china:city 106.504962 29.533155 chongqing 114.085947 22.547 shenzhen
(integer) 2
127.0.0.1:6379[1]> GEOADD china:city 120.153576 30.287459 hangzhou 108.9608 34.26641 xian
(integer) 2

geopos

127.0.0.1:6379[1]> GEOPOS china:city beijin    # 獲取指定城市的經度和緯度
1) 1) "116.40528291463852"
   2) "39.904988422912503"
127.0.0.1:6379[1]> GEOPOS china:city shanghai shenzhen
1) 1) "121.47264629602432"
   2) "31.23170490709807"
2) 1) "114.08594459295273"
   2) "22.546999937739663"

兩人之間的距離

指定單位的引數 unit 必須是以下單位的其中一個:

m 表示單位為米。
km 表示單位為千米。
mi 表示單位為英里。
ft 表示單位為英尺。
如果使用者沒有顯式地指定單位引數, 那麼 GEODIST 預設使用米作為單位。

GEODIST 命令在計算距離時會假設地球為完美的球形, 在極限情況下, 這一假設最大會造成 0.5% 的誤差。
127.0.0.1:6379[1]> GEODIST china:city beijin shanghai
"1067597.9668"
127.0.0.1:6379[1]> GEODIST china:city beijin shanghai km
"1067.5980"

georadius - 以給定的經緯度為中心, 找出某一半徑內的元素

我附近的人(獲得附近的人的地址,定位)通過半徑來查詢
所有的資料應該錄入:china:city,才會讓結果更加清晰

127.0.0.1:6379[1]> GEORADIUS china:city 110 30 1000 km    # 以11030這個經緯度為中心,尋找方圓1000km內的城市
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km
1) "chongqing"
2) "xian"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km withdist    # 顯示到中心位置的距離
1) 1) "chongqing"
   2) "341.4052"
2) 1) "xian"
   2) "484.5164"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km withcoord    # 顯示範圍內他人的定位資訊
1) 1) "chongqing"
   2) 1) "106.50495976209641"
      2) "29.53315530684997"
2) 1) "xian"
   2) 1) "108.96080106496811"
      2) "34.266409954001269"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km withdist withcoord count 1    # 篩選出指定的結果
1) 1) "chongqing"
   2) "341.4052"
   3) 1) "106.50495976209641"
      2) "29.53315530684997"
127.0.0.1:6379[1]> GEORADIUS china:city 110 30 500 km withdist withcoord count 2
1) 1) "chongqing"
   2) "341.4052"
   3) 1) "106.50495976209641"
      2) "29.53315530684997"
2) 1) "xian"
   2) "484.5164"
   3) 1) "108.96080106496811"
      2) "34.266409954001269"

GEORADIUSBYMEMBER

# 找出位於指定元素周圍內的其它元素
127.0.0.1:6379[1]> GEORADIUSBYMEMBER china:city beijin 1000 km    # 顯示以北京為中心,方圓1000km內的城市
1) "beijin"
2) "xian"
127.0.0.1:6379[1]> GEORADIUSBYMEMBER china:city shanghai 400 km
1) "hangzhou"
2) "shanghai"

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

該命令將返回11個字元的Geohash字串!

# 將二位的經緯度轉換為一維的字串,如果兩個字串越接近,則距離越近
127.0.0.1:6379[1]> GEOHASH china:city beijin chongqing
1) "wx4g0b7xrt0"
2) "wm78p86e170"

GEO 底層的實現原理其實就是Zset!我們可以使用Zset命令來操作GEO

127.0.0.1:6379[1]> ZRANGE china:city 0 -1    # 檢視地圖中的全部元素
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"
6) "beijin"
127.0.0.1:6379[1]> ZREM china:city beijin    # 移除指定元素
(integer) 1
127.0.0.1:6379[1]> ZRANGE china:city 0 -1
1) "chongqing"
2) "xian"
3) "shenzhen"
4) "hangzhou"
5) "shanghai"
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章