试图找遍这个答案,但打墙。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)在命令行中运行命令行memcache结果,通过web broswer中的$ memcache-> get($ key)可以找到web浏览器结果。 CLI和Web缓存似乎是分开的,我该如何解决这个问题?
我检查我的phpinfo(),php-apache2和php-cli都有扩展名= 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();从命令和网络浏览器。两者都显示全部3台服务器其中一些值虽然不同,但像curr_items或回收,但关闭了10左右。
感觉就像我错过了什么..我可以做一个解决方法,只是将数据保存到MySQL表中,但这不会回答为什么会发生这种情况的问题。
我试图提供所有我认为需要的信息,但随时可以要求澄清。
假设$ cat_id是一个提供的整数。在两种环境中都是一样的,而不是问题。 – 2012-01-16 18:56:36
如果您告诉它只使用三台服务器中的一台,会发生什么? – Charles 2012-01-17 01:07:52
良好的捕获,当只使用1台服务器,它似乎工作。将其缩小为分配cli与apache不同的平板,或者一个无法正确访问全部3台服务器。我会研究这个。感谢您的支持。 – 2012-01-17 17:29:00