【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
【Redis】二、Geo指令

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深度历险 核心原理与应用实践》钱文品/著

上一篇:【java爬虫】利用webmagic框架实战demo


下一篇:理解HashMap源码