admin管理员组

文章数量:1608599

更多redis相关知识请访问 www.itkc8

 

需求:今天碰到一个需求是将骑手(相当于美团外卖的骑手)的实时定位保存下来,或者像京东物流的送货员的轨迹,我们可以看到我们的快递到哪个地方了,快递员现在在哪个位置。

思路:骑手登录之后前端每1分钟上传GPS定位,后端接收数据先保存到redis中, 然后采用定时任务批量处理redis中的数据批量存入mysql中。(暂时采用该方案,以后可能直接用HBase之类的了)。

实现:

前端上传的实体,前端也是批量上传的,List<GpsUploadVO>

 

前端上传位置的List直接存Redis,并且以上传集合的手机号为key,因为同一台手机上传的手机号肯定是相同的。

 

存到Redis的结构是list的形式;

 

手机号为key, 下面是上传的集合对象;

1、从redis中批量获取每个key前n个数据。

2、入库,批量写入mysql数据。

3、删除redis中已经入库的数据(按手机号分组)

1>常规方法:

常规方法

这里我就不贴出改方法要消化的时间了,处理一万条数据反正让人吐血。

2>多线程方法处理:

线程方法

从redis中获取对象

多线程删除redis中已经入库的对象

这样处理时间稍微好点,但是还是有点吐血;

3>管道方式处理:

管道方式从redis获取对象集合

 

把循环遍历的方法放到管道中,大家自己去测试一下吧,效率是几十倍甚至上百倍,这就是与Mysql一样批量处理的好处。

mysql的批量处理方式

请大家多多指教,验证一下效率如何。

更多redis相关知识请访问 www.itkc8

本文标签: 飞起管道速度Redispipeline