您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
原生php实现redis队列
发布时间:2022-10-21 22:06:52编辑:雪饮阅读()
任务投递的实现:
delivery.php:
<?php
//投递任务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth("123456");
//队列名(list的key名)
$queue_name="task_list_1";
$task["task_name"]=$argv[1];
$redis->lPush($queue_name,json_encode($task));
任务消费的实现:consumption.php
<?php
//消费任务
//防止socket链接超时
ini_set('default_socket_timeout', -1);
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth("123456");
$queue_name="task_list_1";
while(true){
try{
$val=$redis->brPop($queue_name,0);
/* 据说加上这个心跳可以解决防止被redis踢掉,但我怀疑是他超时时间配置问题,过了超时时间会不会被踢掉,这个不在connnect方法上
$pong = $redis->ping();
if ($pong != '+PONG') {
throw new Exception('Redis ping failure!', 500);
}
*/
$task=json_decode($val[1],true);
echo "正在处理:`".$task["task_name"]."`任务\r\n";
}
catch(\Exception $e){
echo "发生了异常:".$e->getMessage()."\r\n";
exit();
}
}
任务投递命令如:“/www/server/php/74/bin/php -c /www/server/php/74/etc/php.ini delivery.php 查询redis”
任务消费命令如:"/www/server/php/74/bin/php -c /www/server/php/74/etc/php.ini consumption.php"
关键字词:php,redis,队列