Geo redis实现附近的车辆/人
前段时间业务需要实现一个用户查看附近车辆的服务:用户根据自己的定位坐标(经度、纬度)来快速搜索到附近的车辆,可以根据半径进行搜索。 根据需求也制定了几个技术方案,思路是这样的:将用户的坐标跟数据库中各个车辆的最新坐标进行距离计算,找到指定距离内的车辆并按照距离从小到大排序返回给业务。这种方法需要找到每辆车的最新定位,数据库中车辆定位数庞大,查询时数据库压力较大,并且每辆车需要计算一次距离,整个流程的耗时耗费数据库资源可想而知。考虑第二种方案,因为现在业务所有车辆的最新定位都保存在缓存中(memcached),可以采用把所有车辆的定位先从缓存中拿出来,然后进行距离计算,这种方法同样存在问题,就是操作缓存过于频繁。 以上两种方案,都是通过计算距离来判断的,后来发现geohash算法在这方面很高效(geohash原理参加 http://blog.jobbole.com/80633/ )。于是将该思路应用到以上两个方案中,无非是多保存一份每个定位点的geohash值,然后根据该hash值来进行排序找到附近的车(当然该hash值在数据库中做索引)。沿着这个思路的技术实现也考虑了一些,等技术实现(具体实现思路就不啰嗦了)基本考虑好的时候,突然发现redis 自带的geo api能够完美地解决该问题。于是,啥也别说,直接使用现成的就好啦。 闲聊结束,直接操作,按照步骤来就能轻松搞定: 一