官方相关介绍:https://redis.io/commands/geoadd

菜鸟教程:https://www.runoob.com/redis/redis-geo.html

在线测试:https://try.redis.io/

版本支持

Redis GEO是 Redis 3.2版本之后才支持的。所以我们要确定我们的版本是否支持,打开redis-cli 输入 info 就可以查看redis的信息了!

注意事项:

精度范围是-180 到180的

维度范围是 -85.0511278 到 85.05112878度

相关的命令

  • GEOADD :将经纬度添加到key中 参数:Key、精度、维度、名称
  • GEODIST : 获取两个坐标之间的距离 默认单位是m 参数 :Key、 名称1、 名称2、单位(可不填写,千米就是km)
  • GEOHASH : 返回11位丢失精度的经纬度字符串(如果两个字符串越接近,说明越接近)
  • GEOPOS
  • GEORADIUS : 获取某一点的某半径内的元素 参数:Key、精度、维度、半径、单位(km)、其他参数(可出现多个WITHDIST、WITHCOORD、WITHHASH、ASC、DESC,更多参数建议去官网查看,更详细)
  • GEORADIUSBYMEMBER : 以某个元素为中心,查询某半径范围内的元素 参数:Key、名称、半径、单位、其他参数(更多参数建议去官网查看,更详细))
  • GEOSEARCH
  • GEOSEARCHSTORE

实验一:添加城市

# 将116.40 39.90 添加到china:city中,并命名为北京
geoadd china:city 116.40 39.90 beijing

# 连续填写城市
geoadd china:city 121.47 31.23 shanghai 114.05 22.52 shenzhen 120.16 30.24 hangzhou 108.96 34.26 xian

实验二:两个坐标的距离

geodist china:city beijing xian
>> "910056.5237"

geodist china:city beijing xian km
>> "910.0565"

实验三:查询指定区域范围的其他元素

# 查询符合距离115.00 38.00 1000千米的前100个元素
georadius china:city 115.00 38.00 1000 km asc count 100
1) "beijing"  
2) "hangzhou"
3) "shanghai"
4) "xian"

# 查询符合距离115.00 38.00 500千米的元素
georadius china:city 115.00 38.00 500 km
1) "beijing"

实验四:查询某个元素来指定半径

# 查询元素北京范围内1000千米的元素
georadiusbymember china:city beijing 1000 km
1) "beijing"
2) "xian"

底层实现就是Zset

当我根据某个元素查询指定半径的其他元素时,发现元素名称打错了,就报了如下错误:

zset member 就是zset集合!

实验四:可用Zset实现原理实现删除某个位置

# 查询所有的 china:city 元素
zrange china:city 0 -1

# 删除北京元素
zrem china:city beijing