2

我正在使用学说 2,目前没有缓存任何内容。我想在 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. 我更新User(或其任何关系)Doctrine 检测它并打破该对象的缓存
  4. 我通过 id 请求相同User,Doctrine 不再有它在缓存中,获取它并使用更新的用户设置缓存,然后返回它

那可能吗?

干杯,马克西姆

4

2 回答 2

3

您要查找的内容(在 Doctrine ORM 中)仅在结果集缓存中受支持,并且仅适用于 DQL 查询产生的 SQL 查询的结果。

您正在寻找的功能的确切名称是“二级缓存”,Doctrine ORM 尚不支持该功能,但目前正在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 回答