試圖找遍這個答案,但打牆。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