Redis之管道pipeline,让速度飞起来Redis的管道

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HUXU981598436/article/details/88863516

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

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

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

实现:

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

神奇的Redis之管道pipeline,让速度飞起来

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

神奇的Redis之管道pipeline,让速度飞起来

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

神奇的Redis之管道pipeline,让速度飞起来

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

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

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

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

1>常规方法:

神奇的Redis之管道pipeline,让速度飞起来

常规方法

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

2>多线程方法处理:

神奇的Redis之管道pipeline,让速度飞起来

线程方法

神奇的Redis之管道pipeline,让速度飞起来

从redis中获取对象

神奇的Redis之管道pipeline,让速度飞起来

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

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

3>管道方式处理:

神奇的Redis之管道pipeline,让速度飞起来

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

神奇的Redis之管道pipeline,让速度飞起来

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

神奇的Redis之管道pipeline,让速度飞起来

mysql的批量处理方式

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

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

猜你喜欢

转载自blog.csdn.net/HUXU981598436/article/details/88863516