提前声明,本篇文章技术有限。代码有优化空间。
无项目嵌套,需要自行修改。
主要使用redis进行延迟队列。
添加延迟队列。
/**
* 添加延迟队列,使用redis的有序集合
* @return int
*/
public function delaylist()
{
$redis = new \redis();
$redis->connect('127.0.0.1', 6379);
//生成随机数,防止值重复无法添加(建议拼接唯一主键)
$b = rand(0,9999);
//添加有序集合
$a = $redis->zadd('good',time()+60,time()+ $b);
return $a;
}
消费代码如下
/**
* 消费队列信息
*/
public function handlelist()
{
$redis = new \redis();
$redis->connect('127.0.0.1', 6379);
while(true){
//取出过期的第一个值
$a = $redis->ZRANGEBYSCORE('good',0,time(),['limit' => [0,1]]);
if(empty($a)){
continue;
// echo "空";die;
}
$value = $a[0];
//删除队列中的值
$res = $redis->zRem('good',$value);
if($res) {
echo '消费了' . "</br>";
} else{
echo '没有消费' . "</br>";
}
}
}