redis实现队列,一定要用crontab定时任务来执行吗

比如说秒杀活动这种高并发的情况下,我们使用redis函数rpush,lpop实现队列处理。
为什么在网上看到的,都是先用rpush把请求先放入队列中比如rpush.php,

$arr = array('h','e','l','l','o','w','o','r','l','d'); // 模拟请求
 foreach($arr as $k=>$v){
 
  $redis->rpush("mylist",$v);
 
}

然后再用lpop取出队列每个请求lpop.php

$redis->lpop('mylist');

建立定时任务

*/1 * * * * root php /wwwroot/workplace/redis/rpush.php

 */3 * * * * root php /wwwroot/workplace/redis/lpop.php

问题:用redis实现消息队列步骤都是这样的吗。进队和出队列分开两个文件,然后用crontab定时执行吗.


扬帆大鱼
浏览 846回答 2
2回答

一只名叫tom的猫

不太能理解为什么要用crontab, 消息队列说简单点就是生产者消费者模式,一般是分开处理生产者: 假如用的是PHP-FPM这种模式,收到请求后直接push到队列里消费者: 一般都是写一个常驻内存服务阻塞获取队列里面消息(blpop),有新消息就立刻处理猜测用到crontab是因为没有用阻塞方式获取,然后每3秒检查一下是否有新消息,但是3秒处理一次对于秒杀来说就有些不合适了

呼唤远方

首先你要把网上看到的那个用crontab方案的理由说出来,可能场景不一样,比如秒杀小米手机,用户下单通过接口把重要的消息rpush进redis队列,然后超过数量就不给rpush了,给用户一个安慰提示,接下来lpop发单了,以上个人看法。
打开App,查看更多内容
随时随地看视频慕课网APP