使用不同缓存的Memcache php-cli与apache


Memcache php cli vs apache using different caches?

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

代码:(保存为最新的.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)从我的网站检索数据。反之亦然,当我从web浏览器运行相同的脚本时http://www.url.com/recent.php它运行得很好,但从命令行找不到?命令行memcache结果可以通过命令行中运行的$memcache->get($key)找到,web浏览器结果可以通过web浏览器中的$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或回收的,但相差10左右

感觉我错过了什么。。我可以变通一下,把数据保存到MySQL表中,但这并不能回答为什么会发生这种情况。

我已经尽力提供了我认为需要的所有信息,但请随时要求澄清。

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

您可以在Linux上使用sudo ipcs列出这些缓存,请查看Shared Memory Segments。查看"所有者"栏,您可能会看到两者。我个人通过作为www数据用户运行我的CLIPHP来解决这个问题:

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