lankk的魔法书札 2019-06-21
LBS(Location Based Service),基于位置的服务。
Redis 是最热门的 nosql 数据库之一,它的最大特点就是快。
所以在 LBS 这种需要大量写入和查询的应用场景中,用它来存储用户的地理位置信息最适合不过了。
Redis 的 GEO 是 3.2 版本的新特性。这个功能可以将用户给定的地理位置信息储存起来, 并对这些信息进行操作。
PS:关于三种nosql数据库这里我也做了调研,其中mongodb最大的特点是灵活,因为其数据是以json的格式存储,所以字段随时可以增加或减少;Redis的特点是快,适合单一的,简单的,大量数据的存储;HBase我没有做深入研究,它的特点是大,适合做离线缓存。在处理社交这种关系复杂的数据存储时,依然还是需要用mysql这种关系型数据库,nosql并不能完全替代。
目前 redis 支持以下 6 个 GEO 的相关操作
GEOADD location-set longitude latitude member [longitude latitude member ...]
示例
redis> GEOADD Hangzhou 120.0919500000 30.3219600000 Xihu
GEOPOS key member [member ...]
示例
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