引言
GEO是redis的高级数据结构。GEO存储的元素是经度纬度和名字,是用来计算半径范围内有哪些之前已经存储的值。
主要有以下命令
GEOADD
GEODIST
GEOHASH
GEOPOS
GEORADIUS
GEORADIUSBYMEMBER
挨个介绍
GEOADD
把一个或多个经纬度地址添加到key中。
已经存在的元素再次添加会被更新经纬度
geoadd key longitude latitude element [longitude latitude emelent …]
GEODIST
计算已经存储的两个值的距离,距离的单位可以是m、km、mi(英里)、ft(英尺)
geodist key member1 member2 [unit]
GEOHASH
获取一个或多个地址的地理编码字符串。
地点编码字符串可以理解为一个经纬度的唯一编码。具体见https://en.wikipedia.org/wiki/Geohash
geohash key member[member …]
GEOPOS
获取一个或多个地址的经纬度
geopos key member[member …]
GEORADIUS
获取指定经纬度的半径范围内的元素,返回的元素内容可以包括距离,地理编码和经纬度,也可限定个数
georadius longitude latitude radius m|km|mi|ft [WITHDIST] [WITHHASH] [WITHCOORD] [asc |desc] [count count]
GEORADIUSBYMEMBER
求某一元素半径范围的count个元素。 与georadius类型
georadiusbymember key member radius [withcoord] [withhash] [withdist] [asc|desc] [count count]
案例
这个特别适合用来计算两个目标之间的距离。
一个目标范围内的其他目标
比如微信的附近的人,就可以使用这种数据结构实现。
有一疑惑,添加的元素怎么删除呢?
其实geo命令是把元素存储在zset结构中,可以使用zrem命令删除元素。当然也可使用所有与zset相关的命令