Doctrine - 修改实体时中断查询缓存(二级缓存)

时间:2013-02-25 22:22:37

标签: caching doctrine-orm symfony-2.1 second-level-cache

我现在使用的是教义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在缓存中没有它,获取它并使用更新的用户设置缓存然后返回它
  5. 这可能吗?

    干杯, 马克西姆

2 个答案:

答案 0 :(得分:3)

仅在resultset cache中支持您在Doctrine ORM中查找的内容,并且仅适用于DQL查询生成的SQL查询的结果。

您要查找的功能的确切名称是"second-level cache",Doctrine ORM尚不支持该功能,但目前正在开发{希望在版本2.5中可用){{3} 3}}

目前,如果确实需要,您必须在自己的服务层中处理此类缓存。

答案 1 :(得分:0)

如果您通过它的主键拉动实体,缓存将由学说的“身份地图”完成,如此处所述http://doctrine-orm.readthedocs.org/en/latest/reference/unitofwork.html