1. 程式人生 > 資料庫 >【Redis】二、Geo指令

【Redis】二、Geo指令

Redis提供了6個Geo指令,它只是一個普通的zset結構。

geoadd 增加

geoadd指令的引數為:key名稱 經度 緯度 元素名稱。可以同時新增多個經度、緯度、名稱。

127.0.0.1:6379> geoadd company 116.48105 39.996794 juejin
(integer) 1
127.0.0.1:6379> geoadd company 116.514203 39.905409 ireader
(integer) 1
127.0.0.1:6379> geoadd company 116.489033 40.007669 meituan
(integer) 1
127.0.0.1:6379> geoadd company 116.512108 39.787602 jd 116.334255 40.027400 xiaomi
(integer) 2
127.0.0.1:6379>

Geo儲存結構使用的是zset,我們可以使用zset相關的指令來操作Geo資料。例如,元素的刪除可以使用zrem命令。

geodist 距離

geodist命令用來計算兩個元素之間的距離,引數為:key名稱 元素名稱 距離單位。

127.0.0.1:6379> geodist company juejin ireader km
"10.5501"
127.0.0.1:6379> geodist company juejin meituan km
"1.3878"
127.0.0.1:6379> geodist company juejin jd km
"23.4180"

距離單位可以是m、km、ml、ft(米、千米、英里、尺)

geopos 獲取元素位置

geopos命令可以獲取key中任意元素的經緯度座標。

127.0.0.1:6379> geopos company juejin
1) 1) "116.4810499548912"
   2) "39.996793488582597"
127.0.0.1:6379>
127.0.0.1:6379> geopos company jd
1) 1) "116.51210993528366"
   2) "39.787602951302354"
127.0.0.1:6379>
127.0.0.1:6379> geopos company meituan xiaomi
1) 1) "116.48903220891953"
   2) "40.00766997707732"
2) 1) "116.33425265550613"
   2) "40.027400246581614"
127.0.0.1:6379>

GeoHash 獲取元素的hash值

GeoHash可以獲取元素的經緯度編碼字串,它是base32編碼。

127.0.0.1:6379> geohash company jd
1) "wx4f771e8f0"
127.0.0.1:6379> geohash company meituan
1) "wx4gdg0tx40"
127.0.0.1:6379>

可以用這個編碼值在網站:http://geohash.org/hash值 直接進行定位。
例如:http://geohash.org/wx4f771e8f0
在這裡插入圖片描述

georadiusbymember 附近的公司

這個指令用來查詢指定元素附近的其他元素。
查詢範圍20公里以內,最多三個元素,按照距離倒序排列。

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

withcoord 攜帶座標,withdist 攜帶距離,withhash 攜帶hash

127.0.0.1:6379> georadiusbymember company ireader 20 km withcoord
1) 1) "ireader"
   2) 1) "116.51420205831528"
      2) "39.905409186624944"
2) 1) "juejin"
   2) 1) "116.4810499548912"
      2) "39.996793488582597"
3) 1) "meituan"
   2) 1) "116.48903220891953"
      2) "40.00766997707732"
4) 1) "jd"
   2) 1) "116.51210993528366"
      2) "39.787602951302354"
127.0.0.1:6379> georadiusbymember company ireader 20 km withdist
1) 1) "ireader"
   2) "0.0000"
2) 1) "juejin"
   2) "10.5501"
3) 1) "meituan"
   2) "11.5748"
4) 1) "jd"
   2) "13.1044"
127.0.0.1:6379> georadiusbymember company ireader 20 km withhash
1) 1) "ireader"
   2) (integer) 4069886008361398
2) 1) "juejin"
   2) (integer) 4069887154388167
3) 1) "meituan"
   2) (integer) 4069887179083478
4) 1) "jd"
   2) (integer) 4069152554926187

georadius根據座標值查詢附近元素

127.0.0.1:6379> georadius company 116.514202 39.905409 20 km withdist count 3 asc
1) 1) "ireader"
   2) "0.0000"
2) 1) "juejin"
   2) "10.5501"
3) 1) "meituan"
   2) "11.5748"

參考《Redis深度歷險 核心原理與應用實踐》錢文品/著