## Redis 实现队列
Redis 实现队列
场景说明:
·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时
·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求
·抢购场景,先入先出的模式
命令:
rpush + blpop 或 lpush + brpop
rpush : 往列表右侧推入数据
blpop : 客户端阻塞直到队列有值输出
简单队列:
simple.php
$stmt = $pdo->prepare('select id, cid, name from zc_goods limit 200000');$stmt->execute();while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $redis->rPush('goods:task', json_encode($row));} $redis->close();
获取20000万个商品,并把json化后的数据推入goods:task队列
queueBlpop.php
// 出队while (true) { // 阻塞设置超时时间为3秒 $task = $redis->blPop(array('goods:task'), 3); if ($task) { $redis->rPush('goods:success:task', $task[1]); $task = json_decode($task[1], true); echo $task['id