用REDIS实现LBS系统
前言
LBS系统其实并不是什么难的问题,现在已经有很多成熟的框架,比如MongoDB就提供一套性能不错的LBS系统。但是前些日子从公司接手这份差事的时候,(由于当时的整个应用架构体系还比较简单)并不希望轻易就引入其他系统和架构,在当时仅有REDIS和MYSQL的时候,果断就选择从REDIS下手。由于是第一次写这种技术方面的文章,可能写的比较草,就算是抛砖引玉吧。有什么不足的地方请大家多多指正。
转载请注明出处:http://blog.csdn.net/kimjuny/article/details/48683005
准备工作
GeoHash是什么这里就不多讲了,如果不是很明白就多看一些百科和讲解吧:https://en.wikipedia.org/wiki/Geohash
这里丢上一丢Java的GeoHash库:https://github.com/kungfoo/geohash-java
Java的Redis客户端Jedis:https://github.com/xetorthio/jedis
思路1
在刚开始了解GeoHash的时候,我们知道GeoHash越长,它所代表的位置就越精准。那么在实现GeoHash的时候就可以引入这种思路,可不可以用字符串匹配的方式,根据我们所需要的精准度去前缀匹配出我们需要的结果呢?
如果你看到了上面的这一段脚本,你应该就会明白我的意思了。Redis在sorted set中插入元素的时候,如果所插入的元素的score值相等,那么它将会按照alphabetical的顺序插入元素。沿用这种sorted set特性:
这种结构,可以让我们比较轻松地实现对geohash的前缀搜索。
当我们需要搜索详细内容如uvxe下面的条目的时候