2

現在、何もキャッシュせずにDoctrine2を使用しています。Doctrine内でいくつかのキャッシュシステムを有効にしたいのですが、どこでも手動で管理する必要があるようです。

$memcache = new Memcache();
$memcache->connect('memcache_host', 11211);

$cacheDriver = new \Doctrine\Common\Cache\MemcacheCache();
$cacheDriver->setMemcache($memcache);
$cacheDriver->save('cache_id', 'my_data');
...
$cacheDriver->delete('cache_id');

Doctrineがこれを自動的に管理できるかどうか知りたいのですが。例えば:

  1. キャッシュは有効です。IDでUserエンティティをリクエストします。そのキャッシュでDoctrineを検索しますが、ユーザーを見つけることができず、フェッチしてキャッシュに設定し、返します。

  2. もう一度フェッチすると、Doctrineはキャッシュされたものを返しますUser

  3. UserDoctrineがそれを検出してこのオブジェクトのキャッシュを壊す(またはその関係のいずれか)を更新します
  4. 私はidで同じものを要求しますUser、Doctrineはもうそれをキャッシュに持っていません、それをフェッチして、それを返す前に更新されたユーザーでキャッシュを元に戻します

それは可能ですか?

乾杯、マキシム

4

2 に答える 2

3

(Doctrine ORMで)探しているものは、結果セットキャッシュでのみサポートされ、DQLクエリによって生成されたSQLクエリの結果にのみ適用されます。

探している機能の正確な名前は「第2レベルのキャッシュ」です。これはDoctrineORMでまだサポートされていませんが、現在https://github.com/doctrine2.5で開発中です(バージョンで利用可能になることを願っています) 。 / doctrine2 / pull / 580

今のところ、本当に必要な場合は、独自のサービスレイヤーでこの種のキャッシュを処理する必要があります。

于 2013-02-25T22:35:52.893 に答える
0

主キーでエンティティをプルしている場合、キャッシングはここで説明されているように教義の「アイデンティティマップ」によって行われますhttp://doctrine-orm.readthedocs.org/en/latest/reference/unitofwork.html

于 2015-04-02T16:18:37.213 に答える