この回答を全部見つけようとしましたが、壁に当たった。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対アパッチから実行するときに、なぜそれが別のキャッシュにアクセスしていますか?コマンドラインからphp /var/www/localhost/htdocs/url/recent.phpを実行すると、完全に実行されますが、$ memcache-> get($ key)経由で私のウェブサイトからデータを取得することはできません。 逆の場合、ウェブブラウザから同じスクリプトを実行すると、http://www.url.com/recent.phpは完全に実行されますが、コマンドラインからは見つかりませんか?コマンドラインmemcacheの結果は、コマンドラインで$ memcache-> get($ key)を実行すると見つかります。ウェブブラウザの結果は、web broswerの$ memcache-> get($ key)で確認できます。 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やreclaimedのように異なりますが、10程度です。
私は何かが欠けているように感じます。私は回避策をとって、MySQLテーブルにデータを保存することができますが、なぜこれが起こっているのかという質問には答えません。
私は必要と思われるすべての情報を提供しようとしましたが、明確にするよう依頼してください。
$ cat_idは指定された整数です。両方の環境で同じで問題はありません。 –
3台のサーバのうち1台だけを使用するように指示するとどうなりますか? – Charles
良いキャッチは、1台のサーバーを使用しているときに動作するようです。 cli vs apacheで異なるスラブを割り当てるか、3つのサーバすべてに正しくアクセスしないかのいずれかに絞り込みます。私はこれを調べます。足に感謝します。 –