比如说秒杀活动这种高并发的情况下,我们使用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定时执行吗.
不太能理解为什么要用
crontab
, 消息队列说简单点就是生产者消费者模式,一般是分开处理生产者: 假如用的是
PHP-FPM
这种模式,收到请求后直接push
到队列里消费者: 一般都是写一个常驻内存服务阻塞获取队列里面消息(
blpop
),有新消息就立刻处理猜测用到
crontab
是因为没有用阻塞方式获取,然后每3秒检查一下是否有新消息,但是3秒处理一次对于秒杀来说就有些不合适了