我一直在寻找这个答案,但是一直碰壁。
代码:(保存为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)从我的网站检索数据。
反之,当我从Web浏览器http://www.url.com/recent.php 运行相同的脚本时,它可以完美运行,但是无法从命令行找到? 命令行memcache结果可以通过在命令行中运行 $memcache->get($key) 找到,Web浏览器结果可以通过$memcache->get($key)从Web浏览器找到。 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
我也尝试输出状态并从命令和Web浏览器检查$memcache->getExtendedStats();。两者都显示所有3个服务器。但有些值是不同的,如curr_items或reclaimed,但相差约10个左右。
感觉我错过了什么...我可以制作一个解决方法,将数据保存到MySQL表中,但这不会回答为什么会发生这种情况的问题。
我已经尽力提供我认为需要的所有信息,但请随时要求澄清。