LBS(Location Based Service),基于位置的服务。mysql
Redis 是最热门的 nosql 数据库之一,它的最大特色就是快。
因此在 LBS 这种须要大量写入和查询的应用场景中,用它来存储用户的地理位置信息最适合不过了。git
Redis 的 GEO 是 3.2 版本的新特性。这个功能能够将用户给定的地理位置信息储存起来, 并对这些信息进行操做。redis
PS:关于三种nosql数据库这里我也作了调研,其中mongodb最大的特色是灵活,由于其数据是以json的格式存储,因此字段随时能够增长或减小;Redis的特色是快,适合单一的,简单的,大量数据的存储;HBase我没有作深刻研究,它的特色是大,适合作离线缓存。在处理社交这种关系复杂的数据存储时,依然仍是须要用mysql这种关系型数据库,nosql并不能彻底替代。sql
目前 redis 支持如下 6 个 GEO 的相关操做mongodb
GEOADD location-set longitude latitude member [longitude latitude member ...]
数据库
示例json
redis> GEOADD Hangzhou 120.0919500000 30.3219600000 Xihu
缓存
GEOPOS key member [member ...]
nosql
示例code
redis> GEOPOS Hangzhou Sandun Xixi Xihu
GEODIST location-set location-x location-y [unit]
其中 unit 参数是距离单位,可选填
示例
redis> GEODIST Hangzhou Xihu Xixi m
这个功能颇有用,能够用来查找周边的点
GEORADIUS location-set longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [ASC|DESC] [COUNT count]
其中:
radius表示范围距离,距离单位是 m|km|ft|mi
可选参数:
示例
redis> GEORADIUS Hangzhou 120.0919500000 30.3219600000 10 km
GEORADIUSBYMEMBER key member radius [m|km|ft|mi] [WITHCOORD] [WITHDIST] [ASC|DESC] [WITHHASH] [COUNT count]
和 GEORADIUS 同样,只是传入的是member名,不是坐标了
redis> GEORADIUS Hangzhou Xihu 10 km