2011-07-13 17 views
3

いくつかのWebサイトでいくつかのチュートリアルを読んでいるだけでなく、件名に関するStackOverFlowに関するいくつかの質問を読みましたが、私の質問に。PHP - APCキャッシュ - ユーザー固有のデータとすべてのユーザーがアクセスできるデータの比較

私は、APC Cacheがユーザー固有のデータ(PHPコードで使用される変数、つまりユーザー固有のもの、つまり他のユーザーには見えないデータ)を管理/保存するのかどうか疑問に思っています。すべてのユーザーが見ることができる公に利用可能なデータをどのように保存しますか?

私はそれがどのように機能するかを理解しようとしています。私は、APCがメモリを必要としているファイルに保存したり保存したりすることを知っています...しかし、それらのインクルードされたファイルにコード内にユーザー固有の変数があるとどうなりますか? /account/user_profile.phpで$ firstname $ lastname $ addressなどの変数を使用すると、それらの変数はメモリに保持されますか?たとえば、キャッシュが更新または保存されているときにJohn Xがログインしている場合、APCはJohnを$ firstname、Xをlastnameとして常に記憶しますか?別のユーザーが同じページに行った場合、私は彼にJohnのものではなくそのユーザーのプロフィールの詳細を見せたい。

これはすでに議論されている可能性がありますが、私は明確な回答が必要です。

ありがとうございました!

+0

マット:コードだけがキャッシュされ、メモリはキャッシュされません。それは変数の名前ですが、内容は含まれていません。 – hakre

答えて

6

あなたはAPCキャッシュを誤って理解しています。バイトコードキャッシュです。つまり、PHPスクリプトのバイトコードを格納します。これにより、次回にスクリプトからバイトコードを作成するときにPHPインタープリタが保存されるので、すでにそこにあるためです。

注: PHPバージョン5.5以降ではOpcacheという名前のそれ自身のオペコードキャッシュのコア拡張が付属しています。オペコードキャッシングのためのAPCの使用は非公式に推奨されていません。詳細情報とオプションについては、SysadminまたはOpdeskにお問い合わせください。この回答に記載されている一般的な原則は、拡張名に関係なく適用されます。

通常のPHP実行では、スクリプトコードが取り込まれ、バイトコードにコンパイルされます。このバイトコードは、PHPプロセッサによって実行されます。これはJITコンパイラの一般的なパターンです。

バイトコードキャッシュを使用しないので、バイトコードは各要求ごとにコンパイルする必要があります。バイトコードキャッシュの場合、この手順はすべての要求で一度だけ実行する必要があります。次回はバイトコードが既にキャッシュに入っているため、簡単に実行できます。

これは可変内容とはまったく無関係です。これはコードのためのものです。

+0

+1、[opcode](http://en.wikipedia.org/wiki/Opcode):) –

+0

ありがとうございました。あなたは、変数ではなく内容の名前を保存すると言いました。配列はどうですか?インクルードされたファイルがある場合、たとえばinclude_once( 'code.php')とcode.phpには数十の値を持つ配列があります。 APCはこれらの値を覚えていませんか?これらのアレイをAPCでメモリに保持する方法はありますか? – Matt

+0

@Hahkreあなたは[apc-store] [http://php.net/manual/en/function.apc-store.php]を使ってデータを保存することもできると信じています。 – Alfred

1

P.S:私はAPCの重要性を理解する前に、異なる言語に切り替えたことはありませんでしたが、私はその概念を理解していると思います。私がどこかの嘘を言っているなら、私を修正してください。

> I am wondering how APC Cache manages/saves the user-specific data 
> (variables that will be used in the php code, that are user-specific. 
> In other words, data that should not be seen by other users.) and how 
> does it save the publicly available data that all users can see? 

あなたはapc-fetchを使用して取得することができ、メモリ内のデータを格納するためにapc_storeを使用することができます。プログラム内にすべての変数を格納するわけではありません。

bool apc_store (string $key , mixed $var [, int $ttl = 0 ]) 

注:(値が除去されるまで キャッシュから)PHPの他の多くの機構とは異なり、( apc_storeを使用して格納された変数)が要求間持続します。

パラメータ

キー

店この名前を使用して変数。キーはキャッシュ一意であるため、同じキーで第2の値を保存すると元の値が上書きされます。

ドキュメントを読むことから、memcached/redisと同じように固有のキーを指定する必要があると私は想定しています。データをプライベートに保存するには、session_id(セッションごとに一意)を取得し、これをプレフィックスとして使用します。 keyを使用してデータを保存します。 This Redis tutorial from Simon Willisonはまた、私は以下引用しますキーを使用する方法を説明しているセクションがあります。

Redisのは心でキーと値のストアですので、キーの話 によって開始することは理にかなっています。キーには空白を入れてはいけません - バージョン のRedisは1.2に先行して問題を抱えていましたが、今でも ではエッジケースのバグが一掃されていません。一般的な の規則では、obj-type:id:fieldを使用しますが、Redisは ハッシュを値としてサポートするようになりましたが、この規則はあまり重要ではないようです。

1

私は同じ質問をしました。しかし、鍵はこれです。 APCは、ユーザーをエンドユーザーではなく、John Smithと見なしますが、アプリケーション自体として認識します。したがって、APCがユーザー固有のデータを指定すると、「ユーザー固有のデータ」、つまりmywebsite.comに関する情報をその特定のアプリケーションについてのAPCに保存できます。それは人々のためのものではありません。これは、基本的に別のプログラムに可変情報を送信することを意味します。

関連する問題