php - ZF2 应用中的 Doctrine ORM 缓存

标签 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\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种不同类型的缓存:

  • 实体缓存
  • 元数据缓存
  • 查询缓存
  • 结果缓存
  • 水合缓存

但是在 Doctrine 控制台工具中只有 3 个选项可以清除缓存:

  • orm:clear-cache:metadata 清除各种缓存驱动程序的所有元数据缓存。
  • orm:clear-cache:query 清除各种缓存驱动程序的所有查询缓存。
  • orm:clear-cache:result 清除各种缓存驱动的所有结果缓存。

那么考虑到它可以存储在不同的地方,而不一定是在文件系统中,我该如何清除剩余的缓存(尤其是实体缓存)。


第二个问题:

所有这些缓存是否应该在生产中一起启用(问题主要是关于实体和元数据缓存,因为它们似乎包含相似的数据)?

**注意*驱动程序配置的chache信息来自here

最佳答案

您描述的第一个缓存(实体缓存)实际上是元数据缓存,它允许您覆盖在特定模块中用于实体的缓存类型, 因此,您可以通过运行 orm:clear-cache:metadata 来清除实体缓存。

对于hydration cache,我倾向于说它与结果缓存 Hook 。

从文档中可以看出,在将实体合并回工作单元时会使用 hydration 缓存,考虑到这样做的开销很大,应该避免使用,但是如果您要使用 hydration 缓存, 直觉会建议通过运行 orm:clear-cache:result 你会清除 hydration 缓存。

水合作用缓存:https://groups.google.com/forum/#!topic/doctrine-user/V4G4rRF7Ls4

将实体合并到 UofW:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#merging-entities

关于php - ZF2 应用中的 Doctrine ORM 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654138/

相关文章:

java - 咖啡因:如何得出合适的缓存大小

php - 无法跳转到第 8 行 .../tag.php 中 MySQL 结果索引 6 上的第 0 行

doctrine-orm - 学说 2 多对一关系中的单表继承

php - PHP 中的完美枚举

javascript - 为什么我的 CSS 定位在 Mac OS 上看起来不同

caching - EJB 单例作为共享内存?

php - Doctrine INDEX BY 外键

交响乐2 : how to properly test Doctrine models?

php - 如何按类别 ID 包含两个文件

php - wordpress 创建包含多个条目的元框