1

PHPで記述されたWebアプリケーションを高速化するために、異なるユーザー間(つまり異なるセッション)のデータをRAMに保存する必要があります(データベースとファイルシステムはオプションではありません)。

運が悪かったので、私は数日間グーグルをしていました。memcachedapcについて聞いたことがありますが、それらが自分に適しているかどうか、またはその使用方法すらわかりません。

また、このデータ構造はスレッドセーフである必要があります(競合状態やデータの不整合がないようにするため)。

getById($id)ユースケース:クラスのインスタンスを返す静的ファクトリ関数があります。インスタンスが最初に存在するかどうかを確認するためにこの関数が必要です。存在する場合は、インスタンスを返すか、データベースからのデータを入力して新しいインスタンスを作成します。

4

2 に答える 2

2

Memcachedはキャッシュを分散し、memcachedにキャッシュされたデータはリモートサーバーにあり、MemcachedはCASロック(オプティミスティックロック)を提供します。これを使用して、スレッドセーフなアプリケーションを作成できます。

  1. $ value = $ memcached-> get($ key、NULL、$ cas);
  2. ビジネスプロセス;
  3. $ ret = $ memcached-> cas($ cas、$ key、$ value、$ exp);
  4. 「cas」メソッドは、「成功した場合はTRUEを返し、失敗した場合はFALSEを返します。保存しようとしているアイテムが最後にフェッチしてから変更されている場合、Memcached :: getResultCode()はMemcached::RES_DATA_EXISTSを返します。」

ただし、APCはローカルキャッシュであり、共有メモリを介して実装されます。スレッドセーフかどうかはわかりません。

于 2013-01-24T08:42:10.810 に答える
0

memcachedまたはmemcacheの問題は、php上のクライアントモジュールのみであるということです。また、サーバーアプリをインストールしてそこに接続する必要があります。したがって、他の任意のデータベースまたはファイルを使用できます。最速の解決策は共有メモリhttp://php.net/manual/en/book.shmop.php ですが、これも「構成行の--enable-shmopパラメーターを使用してPHPをコンパイル」できるようにするため、データベースがなく、 phpチェックfopenおよびflock関数へのアクセス

于 2015-06-05T14:31:36.593 に答える