Ale*_*sov 9 php caching doctrine-orm zend-framework2
我在Zend Framework 2项目中使用Doctrine 2 ORM,我想澄清一些有关缓存的细节.
Doctrine配置看起来像
return array(
'doctrine' => array(
'driver' => array(
'application_entities' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'doctrine_cache_entities', // 1
'paths' => array(__DIR__ . '/../src/Application/Entity')
),
'orm_default' => array(
'drivers' => array(
'Application\Entity' => 'application_entities',
),
),
),
'configuration' => array(
'orm_default' => array(
'metadata_cache' => 'doctrine_cache_metadata', // 2
'query_cache' => 'doctrine_cache_query', // 3
'result_cache' => 'doctrine_cache_result', // 4
'hydration_cache' => 'doctrine_cache_hydration', // 5
)
),
),
);
Run Code Online (Sandbox Code Playgroud)
在这里我们可以看到5种不同类型的缓存:
但是,Doctrine控制台工具中只有3个选项可以清除缓存:
那么我怎样才能清除其余的缓存(特别是实体缓存),因为它可以存储在不同的地方,不一定存储在文件系统中.
第二个问题:
是否应该在生产中同时启用所有这些缓存(问题主要是实体和元数据缓存,因为它们似乎包含类似的数据)?
**NB*chache
驱动程序配置的信息来自此处
您描述的第一个缓存(实体缓存)实际上是元数据缓存,允许您覆盖在 Paticulate 模块中的实体上使用的缓存类型,因此您可以通过运行 orm:clear-cache:metadata 来清除实体缓存。
对于水合缓存,我倾向于说它与结果缓存相关联。
从文档中可以看出,在将实体合并回工作单元时会使用水合缓存,并且考虑到这样做的成本很高,应该避免使用水合缓存,但是如果您要使用水合缓存,直觉会建议通过运行 orm:clear -cache:结果你会清除水合缓存。
水合缓存:https://groups.google.com/forum/#! topic/doctrine-user/V4G4rRF7Ls4
归档时间: |
|
查看次数: |
1452 次 |
最近记录: |