利用Redis查询附近的人——GEO
我们所处的任何位置都可以用经度和纬度来标识,经度的范围 -180 到 180,纬度的范围为 -90 到 90。纬度以赤道为界,赤道以南为负数,赤道以北为正数;经度以本初子午线(英国格林尼治天文台)为界,东边为正数,西边为负数。
Redis 在 3.2 版本中增加了 GEO 类型用于存储和查询地理位置,关于 GEO 的命令不多,主要包含以下 6 个:
- geoadd:添加地理位置
- geopos:查询位置信息
- geodist:距离统计
- georadius:查询某位置内的其他成员信息
- geohash:查询位置的哈希值
- zrem:删除地理位置 下面我们分别来看这些命令的使用。
基础使用
添加地理位置
可以先用百度地图提供的经纬度查询工具,地址:
http://api.map.baidu.com/lbsapi/getpoint/index.html
找了以下 4 个地点,添加到 Redis 中
天安门:116.404269,39.913164 月坛公园:116.36,39.922461 北京欢乐谷:116.499705,39.874635 香山公园:116.193275,39.996348
1 geoadd site 116.404269 39.913164 tianan
2 (integer) 1
3 geoadd site 116.36 39.922461 yuetan
4 (integer) 1
5 geoadd site 116.499705 39.874635 huanle
6 (integer) 1
7 geoadd site 116.193275 39.996348 xiangshan
8 (integer) 1
重点参数说明如下:
- longitude 表示经度
- latitude 表示纬度
- member 是为此经纬度起的名字 此命令支持一次添加一个或多个位置信息。
查询位置信息
1 geopos site tianan
2 1) 1) "116.40541702508926392"
3 2) "39.91316289865137179"
相关语法
1 geopos key member [member ...]
此命令支持查看一个或多个位置信息。
距离统计