Redis高级数据结构之GEO

225 阅读2分钟

GEO的介绍

Redis3.2版本提供了GEO地址位置信息定位的功能。支持存储地理位置信息来实现诸如摇一摇,附近位置这类地理位置信息的功能。 Redis也是使用业界比较通用的地理位置距离排序算法GeoHash算法。将二维的经纬度坐标数据映射到一维的整数,将所有元素都挂在到一条线上。在距离靠经二维坐标映射到一维之后点之间的距离也会很近。 例如我们想要计算附近的人时,首先将目标位置映射到这条线上,然后在这个一维的线上获取附近的点就可以。 在Redis中,经纬度使用52位的整数进行编码,放进入zset里面。zset的value是元素的key,score是GeoHash的52位整数值。

GEO的常用操作命令

  • 增加地理位置信息

  • geoadd key longitude latitude member [ longitude latitude member ]

  • longitude latitude member 分别代表地理位置的经度、纬度、成员

  • 返回信息是添加成功的个数 在这里插入图片描述 在这里插入图片描述

  • 获取地理位置信息 在这里插入图片描述

  • 获取两个地理位置坐标之间的距离、默认是米,mi(miles英里)、ft(feet)英尺 在这里插入图片描述

  • 获取指定范围内的地理位置信息位置集合

  • georadius key longitude latitude radius m|km|ft|mi [withcoord][withdist] [withhash][COUNT count] [ascldesc] [store key] [storedist key] georadiusbymember key member radius m|km|ft|mi [withcoord][withdist] [withhash] [COUNT count][ascldesc] [store key] [storedist key]

  • 上述两个命令效果是一样的,都是以一个地理位置为中心,计算出指定半径之内的其他地理位置信息。

  • 不同之处在于下面这个命令需要给出成员

  • withcoord 返回结果包含经纬度

  • withdist 返回结果包含离中心位置的距离

  • withhash 返回结果包含geohash

  • COUNT count 指定半径之后返回的结果数量

  • ascldesc 返回结果是按照距离中心节点距离做升序还是降序

  • store key 将返回结果的地理位置信息保存到指定的键

  • storedist key 将返回结果距离中心节点的距离保存到指定的键 -在这里插入图片描述

  • 获取geohash、字符串越长表示位置越精确

  • 在这里插入图片描述

  • 删除地理位置信息、因为GEO底层基础Zset实现,可以使用Zset的命令实现删除 在这里插入图片描述