redis的GEO扩展
文章目录
在redis3.2版本中,增加了geohash的扩展,这下可以使用Redis来作更多有意思的事情了。
GEO相关命令
主要相关的命令有一下这些
- GEOADD
- GEODIST
- GEOHASH
- GEOPOS
- GEORADIUS
- GEORADIUSBYMEMBER
下面开始一一说明这些命令的作用:
GEOADD
从这个命令的名字来开,大概就可以猜测到它的作用,即向REDIS中增加一条和地理位置相关的数据。 使用语法:
|
|
其中,dataset表示一个数据集,在这个数据集中可以存储多个地名(place),latitude和longtitude各表示纬度和经度,一次GEOADD可以添加多个place。 示例:
|
|
上边的操作,就完成了向Sicily数据集中增加Palermo和Catania这两条信息,在增加完成时,redis-cli返回完成添加的数据条目数。
GEODIST
这条命令会返回在一个GEO数据集中两个地点之间的距离,如果其中一个或者两个地点都不再GEO数据集中,返回NULL。 返回的距离默认单位是米,不过还可以使用其他的单位主要包括:
- km(千米)
- mi (英里)
- ft (英尺)
使用方法如下:
|
|
这样,根据最后的单位,返回不同的数值。
GEOHASH
用这条命令可以返回一个或多个已经存入redis地点的11位Geohash码,使用方法如下:
|
|
返回结果是这样的
|
|
GEOPOS
这个命令,可以返回在GEOSET里边指定地点的经纬度,用法如下:
|
|
返回结果如下:
|
|
GEORADIUS
顾名思义,这个命令返回的是指定地点半径范围内的所有匹配地点,类似与缓冲区分析,这个缓冲区的范围单位跟GEODIST命令中所用的一样有m(米),km(千米),mi(英里),ft(英尺)。 另外这个命令还有另外的选项:
- WITHDIST 返回结果除了匹配点以外,还返回匹配点距离中心点的距离;
- WITHCOORD 返回结果除匹配点外,还包含匹配点的经纬度;
- WITHASH 返回结果初匹配点外,还包含匹配点的geohash码。
默认的返回结果是一个无序的集合,使用命令ASC或DESC可以使匹配点按照距离中心点的远近排序返回。 同时,默认情况下,匹配点会全数返回,增加COUNT命令,可以返回指定数量的匹配结果。 命令用法如下:
WITHDIST
|
|
对应返回
|
|
WITHCOORD
|
|
对应返回
|
|
GEORADIUSBYMEMBER
这个命令和GEORADIUS使用方法类似,不过这个指定中心点不是经纬度,而是一个地点。
|
|
返回如下
|
|
总结
增加了GEO特性的redis,我们可以充分发挥想象力,好好利用一下它,在接下来的几篇博客,我会深入研究一下GEOHASH的特性,另外,Mongodb的GEO特性也非常之的研究。
文章作者 rgozi
上次更新 2015-08-11