php forking和使用memcache

时间:2011-06-22 14:42:24

标签: php memcached fork

我正在尝试学习php,分叉,共享资源等。 在试图理解这些概念的同时,我遇到了一个毫无意义的问题,我修复了(运气好的)却没有得到这个想法......

这可能是一个错误..

<?php
    $m = new Memcached();
    $m->addServer('localhost', 11211);
    $m->set('name', 'anil');

    $workerCount = 3;
    for($c=0; $c<$workerCount; $c++){
        $pid = pcntl_fork();
        if($pid === 0){
            /* Children */
            $m->get('name');
            $name = $m->get('name');

            echo 'This is child number : ' . getmypid() . PHP_EOL;
            echo 'And this is name value in memcache : ' . $name . ' : ' . $m->getResultCode() . PHP_EOL . PHP_EOL;
            exit;
        }else{
            /* Parent */
            pcntl_wait($status);
        }
    }

正如你所注意到的那样,我打电话给$ m-&gt;得到两次......如果我不这样做就行不通。

两个调用结果:

  

这是儿童号码:9684而且这个   是memcache中的microtime:anil:0

     

这是儿童号码:9685而且这个   是memcache中的microtime:anil:0

     

这是儿童号码:9686而且这个   是memcache中的microtime:anil:0

一个通话结果:

  

这是儿童号码:9721而且这个   是memcache中的microtime:anil:0

     

这是儿童号码:9722而且这个   是memcache中的microtime :: 19

     

这是儿童号码:9723这个   是memcache中的microtime :: 19

PS: $ m-&gt; getResultCode() - &gt; 19是:Memcached :: RES_SOME_ERRORS

1 个答案:

答案 0 :(得分:2)

你需要在fork之后创建与memcached的连接。否则你在php端的多个进程之间共享相同的套接字连接,而memcache不知道你是这样做的。