複数のプロジェクト間で Memcache の 1 つのインスタンスを共有することは可能ですか。
あるプロジェクトの memcache 内に 1 つのオブジェクトをプッシュするとします。別のプロジェクトから同じオブジェクトを取得することは可能ですか。?
Memcache は単なるメモリ ストアです。複数のマシンで実行できます。2 つのまったく異なるプロセスが、それを介して互いに通信できない理由はありません。
明確にさせてください。1 つ以上のサーバーで memcache を実行できます。クライアントが特定のインスタンスのセットと通信するように構成できます。同じホストで 2 つ (またはそれ以上) の異なる memcache プロセスを実行でき (異なる IP アドレスやポートをリッスンします)、それらは完全に独立しています。
2 つのアプリケーションが同じインスタンスと通信する場合、それらが通信できない理由はありません。
複数のインスタンスと対話してデータを分割する (つまり、異なるインスタンスに分割する) 場合、複雑になります。クライアントは、どのインスタンスからデータを取得するか、またはどのインスタンスにデータを配置するかを知る必要があります。同じクライアント ライブラリを使用している場合 (たとえば、両方のクライアントが PHP5 である場合)、それは問題ではありません。それらが同じでない場合は、何らかの方法でその問題を処理する必要があります。
異なるテクノロジを使用する場合のもう 1 つの問題は、交換形式について考える必要があることです。PHP でのカスタム シリアル化は、Java や C# では読みにくいためです。一般的な選択肢は、XML または JSON です。
はい、各プロジェクトが同じ方法で memcache ノードを構成し、同じ方法でキャッシュ要素のキーを生成する限り、データを共有できます。
プロジェクトごとに、キーを生成し、プロジェクトを名前空間で分割する方法を提供します。したがって、プロジェクト B の key = foo は、A.foo によって保存/フェッチされ、プロジェクト B の foo は B.foo などと呼ばれます。
このように動作するはずです。ただし、本番環境になると、このアプローチは非常に推奨されません。デバッグの地獄に陥る可能性があるためです (パフォーマンス/信頼性など)。
より良い方法は、memcache の複数のインスタンスを異なるポートで実行することです。これはよりクリーンな IMHO です。