redis php 队列开发

来源:互联网 发布:知乎必读书单 编辑:程序博客网 时间:2024/06/06 04:00
目前使用的list实现的队列
其中有几个关键点记录一下

//阻塞获取,默认等待3秒,如果没有那么循环一次
    $result =$model->brPop($QUEUENAME, 3);
使用此方式可以防止快速多次扫描redis



if(function_exists("pcntl_signal"))
{
   declare(ticks = 1);
   pcntl_signal(SIGTERM,"signal");
   pcntl_signal(SIGINT,"signal");
   pcntl_signal(SIGINT,"signal");

    functionsignal($signo) {
       global $RUNNING_FLAG;
           switch ($signo) {
               case SIGINT:
               case SIGKILL:
               case SIGTERM:
                   if($RUNNING_FLAG){
                       //第一次接收到,那么等执行完毕退出
                       $RUNNING_FLAG=false;
                           echo "first time close.. \r\n";
                   }else{
                       //第二次接收到,直接退出
                           echo "shutdown ...\r\n";
                       exit;
                   }
                   break;
           }
    }
}

使用此方式可以防止队列任务正在执行时被退出

使用shell脚本可以监视当前有多少个消费进程在跑
#通用高优先级队列,对响应要求较高可以放这里
high_count=4;
high_currcount=`ps -ef|grep "queue.php high"|grep -v grep|wc-l`;
if [ "$high_currcount" -lt "$high_count" ];then

   for((i=$high_currcount;i<$high_count;i++));
    do
       phpxxxxx/queue/queue.php high >/dev/null 2>&1 &
    done
fi

原创粉丝点击