Php ZF2应用中的ORM缓存
我在Zend Framework 2项目中使用了Doctrine 2 ORM,我想澄清一些关于缓存的细节 看起来像Php ZF2应用中的ORM缓存,php,caching,doctrine-orm,zend-framework2,Php,Caching,Doctrine Orm,Zend Framework2,我在Zend Framework 2项目中使用了Doctrine 2 ORM,我想澄清一些关于缓存的细节 看起来像 return array( 'doctrine' => array( 'driver' => array( 'application_entities' => array( 'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDri
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
)
),
),
);
这里我们可以看到5种不同类型的缓存:
- 实体缓存
- 元数据缓存
- 查询缓存
- 结果缓存
- 水合缓存
- orm:清除缓存:元数据清除各种缓存驱动程序的所有元数据缓存
- orm:清除缓存:查询清除各种缓存驱动程序的所有查询缓存
- orm:清除缓存:结果清除各种缓存驱动程序的所有结果缓存
第二个问题: 是否应该在生产中同时启用所有这些缓存(问题主要是关于实体和元数据缓存,因为它们似乎包含相似的数据)
**注意。*驱动程序配置的
chache
信息来自您描述的第一个缓存(实体缓存)实际上是元数据缓存,允许您覆盖在特定模块中的实体上使用的缓存类型,
因此,可以通过运行orm:clearcache:metadata来清除实体缓存
对于水合缓存,我倾向于说它链接到结果缓存
从文档中可以看出,在将实体合并回工作单元时使用水合缓存,考虑到这有多昂贵,应该避免使用水合缓存,但是如果使用水合缓存,
直觉告诉我们,通过运行orm:clearcache:result,您可以清除缓存
水合缓存:
将实体合并到UofW:可能每次使用有关实体的条令命令行工具时,实体缓存都会刷新,并且每次请求后都会刷新实体缓存。问题是,实体和元数据缓存似乎相互冲突,仅清除其中一个是没有意义的,只有当两个缓存都被清除时,缓存才会被实际清除。我必须禁用实体缓存并使用rest缓存。从您所说的“实体缓存实际上是元数据缓存”来看,这似乎是真的,但这些缓存实际上是两个具有不同数据的独立缓存,我不明白它们是如何相互作用的。查询、结果和缓存实际上不是问题。