redis存list对象_神奇的Redis之管道pipeline,让速度飞起来

很久没有写文章了,最近太忙,每天晚上10点以后才下班

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

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

实现:

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

f4dffc8571e712ee2686a2668a6a1dfa.png

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

ce26c6fc9ff2039968e8225191e8de85.png

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

3699edb0a03b82925da61083e5aea2c6.png

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

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

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

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

1>常规方法:

1b0b416071571bfca388ac77e08bbc2b.png

常规方法

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

2>多线程方法处理:

1dea7444c3b8b1bf74e39c7216297c58.png

线程方法

e91970556e346c9f3b47e9ae4a46c9a4.png

从redis中获取对象

c755ccd1fc1d064e02586f51cbb1eff3.png

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

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

3>管道方式处理:

fa3a6ccf126ce0d5a58c2a4ce53da255.png

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

40f7337abe3340a07c835e5f2ea79302.png

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

051e61a1d03b800b2b690078033dcde6.png

mysql的批量处理方式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值