Memcache php cli vs apache使用不同的缓存?

时间:2012-01-16 18:55:07

标签: php apache memcached command-line-interface

试图找到这个答案,但是碰壁了。

代码:(保存为recent.php)

$MEMCACHE_SERVERS = array(
    "1.2.3.4", //db prodmaster
    "5.6.7.8",  //db prodslave1
    "9.10.11.12" //db1 dev
);

$memcache = new Memcache();
foreach($MEMCACHE_SERVERS as $server){
    $memcache->addServer($server,11211);
}
$key = "rec_obj_".$cat_id;
$memcache->delete($key);
$memcache->set($key, $objects, MEMCACHE_COMPRESSED, $time=60*60*4);

鉴于上面的代码,为什么从cli与apache运行时它会访问不同的缓存?当我从命令行运行php /var/www/localhost/htdocs/url/recent.php时,它运行完美,但我无法通过$ memcache-> get($ key)从我的网站检索数据。 反之亦然,当我从网络浏览器http://www.url.com/recent.php运行相同的脚本时,它运行得很好,但是无法从命令行找到它?命令行内存缓存结果可以通过$ memcache-> get($ key)在命令行中运行,Web浏览器结果可以通过$ brcwer中的$ memcache-> get($ key)找到。 CLI和Web缓存似乎是分开的,我该如何解决?

我检查了我的phpinfo(),php-apache2和php-cli都有extension = memcache.so。另外,我认为它可能是哈希差异,但两者都说:

Directive               Local Value Master Value
memcache.allow_failover 1   1
memcache.chunk_size 8192    8192
memcache.default_port   11211   11211
memcache.default_timeout_ms 1000    1000
memcache.hash_function  crc32   crc32
memcache.hash_strategy  consistent  consistent
memcache.max_failover_attempts  100 100

还尝试输出状态并检查$ memcache-> getExtendedStats();从命令和Web浏览器。两者都显示所有3台服务器但是有些值不同,例如curr_items或reclaimed但是大约10个左右。

感觉我错过了一些东西......我可以解决这个问题并将数据保存到MySQL表格中,但这不会回答为什么会发生这种情况的问题。

我试图提供我认为需要的所有信息,但请随时要求澄清。

1 个答案:

答案 0 :(得分:1)

运行CLI PHP时,以用户身份运行它。当您通过Apache访问它时,它以apache用户身份运行(www-data或类似)。 memcached实际上关心你的用户名,它会为不同的用户创建不同的缓存。所以你有两个完全独立的缓存。

您可以在Linux上使用sudo ipcs列出这些缓存,在Shared Memory Segments下查看。查看“所有者”列,您可能会看到两者。我个人通过运行我的CLI PHP作为www-data用户来解决这个问题:

sudo su www-data -c "php lawl.php"