当前位置:首页 > 服务器技术 > apache

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

试图找到这个答案,但碰到了一堵墙.

代码:(保存为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或者回收但是大约10个左右.

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

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

解决方法:

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

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

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

【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!