2012-01-16 4 views
4

この回答を全部見つけようとしましたが、壁に当たった。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テーブルにデータを保存することができますが、なぜこれが起こっているのかという質問には答えません。

私は必要と思われるすべての情報を提供しようとしましたが、明確にするよう依頼してください。

+0

$ cat_idは指定された整数です。両方の環境で同じで問題はありません。 –

+2

3台のサーバのうち1台だけを使用するように指示するとどうなりますか? – Charles

+1

良いキャッチは、1台のサーバーを使用しているときに動作するようです。 cli vs apacheで異なるスラブを割り当てるか、3つのサーバすべてに正しくアクセスしないかのいずれかに絞り込みます。私はこれを調べます。足に感謝します。 –

答えて

1

CLI PHPを実行するときは、ユーザーとして実行します。 Apache経由でアクセスすると、apacheユーザーとして実行されます(www-dataなど)。 memcachedは実際にあなたのユーザー名を気にしますが、それはユーザーごとに異なるキャッシュを作成します。したがって、2つの完全に別々のキャッシュがあります。

Linuxではsudo ipcsを使用してこれらのキャッシュを一覧表示できます(Shared Memory Segments)。 「所有者」の列を確認してください。おそらく両方が表示されます。私は個人的にwwwのデータユーザーとしてCLI PHPを実行することでこれを解決します:

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

しかし、なぜそれは1台のサーバで動作するように見えますか? –

+0

Gremlins? :)私はそれが1つのサーバでも動作するようになることができなかった以外は同じ問題を抱えていました。簡単な説明は "私の答えは間違っています"ですが、私は 'ipcs'の出力を見たいでしょう。それは同じ問題ではないと私が容易に信じる私の問題のようには完璧すぎる。 :) – Mike

関連する問題