Redis学习笔记8

119 阅读3分钟

数据结构之GEO

GEOADD:存储坐标

通过使用GEOADD命令,用户可以将给定的一个或多个经纬度坐标存储到位置集合中,并为这些坐标设置相应的名字:

GEOADD location_set longitude latitude name [longitude latitude name ...]

在使用GEOADD命令向位置集合添加坐标的时候,如果用户给定的位置在集合中已经有了与之相关联的坐标,那么GEOADD命令将使用用户给定的新坐标去代替已有的旧坐标。(添加返回1,更新返回0)

GEOPOS:获取指定位置的坐标

GEOPOS location_set name [name ...]

GEODIST:计算两个位置之间的直线距离

在默认情况下,GEODIST命令将以米为单位,返回两个给定位置之间的直线距离。

用户也可以在有需要的情况下,通过可选的unit参数来指定自己想要使用的单位:

GEODIST location_set name1 name2 [unit]

unit参数的值可以是以下单位中的任意一个:

·m——米

·km——千米

·mi——英里

·ft——英尺

GEORADIUS:查找指定坐标半径范围内的其他位置

GEORADIUS location_set longitude latitude radius unit

·location_set参数用于指定执行查找操作的位置集合。

·longitude参数和latitude参数分别用于指定中心点的经度和纬度。 

·radius参数用于指定查找半径。 

·unit参数用于指定查找半径的单位。

GEORADIUS命令具有可选的WITHDIST选项,如果用户在执行GEORADIUS命令时给定了这个选项,那么GEORADIUS命令不仅会返回位于指定半径范围内的位置,还会返回这些位置与中心点之间的距离。

除了WITHDIST之外,GEORADIUS命令还提供了另一个可选项WITHCOORD,通过使用这个选项,用户可以让GEORADIUS命令在返回被匹配位置的同时,将这些位置的坐标也一并返回。

GEORADIUS命令在默认情况下会以无序方式返回被匹配的位置,但是通过使用可选的ASC选项或DESC选项,用户可以改变这一行为,让GEORADIUS命令以有序方式返回结果。

如果用户使用了ASC选项,那么GEORADIUS将根据中心点与被匹配位置之间的距离,按照由近到远的顺序返回被匹配的位置。

通过可选的COUNT选项,我们可以限制命令返回的最大位置数量。

GEORADIUSBYMEMBER:查找指定位置半径范围内的其他位置

GEORADIUSBYMEMBER命令通过选择位置集合中的一个位置作为中心点。

GEOHASH:获取指定位置的Geohash值

redis> GEOHASH Guangdong-cities Qingyuan Guangzhou Shenzhen

  1. "ws0w0phgp70" -- 清远市经纬度坐标的Geohash值

  2. "ws0e89curg0" -- 广州市经纬度坐标的Geohash值

  3. "ws107659240" -- 深圳市经纬度坐标的Geohash值

GEORADIUS命令和GEORADIUSBYMEMBER命令都支持WITHHASH选项,使用了这个选项的命令将会在结果中包含被匹配位置的Geohash值。

需要注意的是,与GEOHASH命令不一样,GEORADIUS命令和GEORADIUSBYMEMBER命令返回的是被解释为数字的Geohash值。而GEOHASH命令返回的则是被解释为字符串的Geohash值。比如GEOHASH命令在获取清远市的Geohash值时返回的是字符串"ws0w0phgp70",而GEORADIUS命令获取的Geohash值却是数字4046597933543051,不过这两个值底层的二进制位是完全相同的

除了GEOADD之外,包括GEOPOS、GEODIST、GEORADIUS、GEORADIUSBYMEMBER和GEOHASH在内的所有GEO命令都是在有序集合的基础上实现的,这也使得我们可以直接使用有序集合命令对位置集合进行操作