普通消息队列
producer(生产者)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$tasks = [];
for ($i = 0; $i < 3; $i++) {
$tasks[] = $i;
}
$res = $redis->lPush("tasks", ...$tasks);
consumer(消费者)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
while (true) {
$res = $redis->brPop("tasks", 20);
if (!$res) {
continue;
} else {
echo "消费成功" . PHP_EOL;
sleep(1);
}
}
延时队列消息
producer(生产者)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$tasks = [];
for ($i = 0; $i < 50; $i++) {
array_push($tasks, time() + $i);
array_push($tasks, str_shuffle('asdfghjklqwertyuiopzxcvbnm1234567890'));
}
$res = $redis->zAdd('delay-queue', [], ...$tasks);
if ($res) {
echo 'success' . PHP_EOL;
} else {
echo 'fail: zadd error' . PHP_EOL;
}
consumer(消费者)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$key = 'delay-queue';
while (true) {
$msg = $redis->zRangeByScore($key, 0, time(), ['limit' => [0, 1]]);
if (count($msg) > 0) {
$success = $redis->zRem($key, $msg[0]);
if ($success) {
echo "消费成功: {$msg[0]}" . PHP_EOL;
sleep(1);
} else {
echo "消费失败" . PHP_EOL;
}
} else {
sleep(1);
}
}