在ZF2项目中启用Doctrine 2缓存

用户3911183

如何在使用Zend Framework 2和Doctrine 2的项目中启用缓存?到底应该启用什么缓存呢?教义缓存或zend缓存?

这是我尝试过的,但是看不到添加在时间执行上的任何差异

module \ Application \ config \ module.config.php

 'doctrine.cache.my_memcache' => function ($sm) {
            $cache = new \Doctrine\Common\Cache\MemcacheCache();
            $memcache = new \Memcache();
            $memcache->connect('localhost', 11211);
            $cache->setMemcache($memcache);
        return $cache;
      }, 


    'doctrine.cache.apc' => function ($sm){
            $apc = new \Doctrine\Common\Cache\ApcCache();
            return $apc;
    },



    // Doctrine config
    'doctrine' => array(
        'driver' => array(
            __NAMESPACE__ . '_driver'   => array(
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'),
            ),
            'orm_default' => array(
                'drivers' => array(
                    __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
                ),
            )
        ),
        'configuration' => array(
            'orm_defaults' => array(
                'metadata_cache'    => 'apc',
                'query_cache'       => 'apc',
                'result_cache'      => 'my_memcache',
            )
        )
    ),

任何帮助或想法或解释表示赞赏。谢谢。

埃迪古

为了减少不必要的麻烦,一定要使用array高速缓存的开发时间和memcachedredisapc在生产环境中运行应用程序时。

您应该将工厂定义放在service_manager>factories键下,而不是直接放在模块配置数组中。

在您的module.config.php

return [
    'doctrine' => [
        'configuration' => [
            'orm_default' => [
                'metadata_cache' => 'mycache',
                'query_cache' => 'mycache',
                'result_cache' => 'mycache',
                'hydration_cache' => 'mycache',
            ]
        ],
    ],

    'service_manager' => [
        'factories' => [
            'doctrine.cache.mycache' => function ($sm) {
                $cache = new \Doctrine\Common\Cache\MemcacheCache();
                $memcache = new \Memcache();
                $memcache->connect('localhost', 11211);
                $cache->setMemcache($memcache);

                return $cache;
            },
        ],
    ],
];

我也强烈建议始终将工厂移至单个工厂类别。这样,在合并配置缓存的帮助下,您将在生产环境上拥有一个更具可读性,可维护性和效率的应用程序

例如:

'service_manager' => [
    'factories' => [
        'doctrine.cache.mycache' => \App\Memcache\Factory::class // implement FactoryInterface
        ],
    ],
];

几年后为将来的读者更新:

我强烈建议您在为各种准则组件(例如实体管理器,配置或缓存)编写定制专用工厂之前,先研究roave / psr-container-doctrine作为库的贡献者,我可以说它很好地满足了我到目前为止所需的大多数用例。当您确实需要专门的工厂时,可以扩展或组成或装饰所提供的工厂,并在上面添加自己的逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ZF2缓存匹配的路由

来自分类Dev

ZF2缓存匹配的路由

来自分类Dev

ZF2 Doctrine 服务 - 多次调用

来自分类Dev

需要启用Openssl(ZF2安装)

来自分类Dev

如何启动一个新的大型ZF2项目?

来自分类Dev

用户在zf2项目的学说实体中的PrePersist上创建的引用集

来自分类Dev

用户在ZF2项目的学说实体中在PrePersist上创建的引用集

来自分类Dev

如何开始一个新的大型ZF2项目?

来自分类Dev

配置中的ZF2 Doctrine2 setFilterSchemaAssetsExpression设置

来自分类Dev

ZF2和Doctrine2:模拟EntityRepository :: findOneByField

来自分类Dev

ZF2 Zend \ Log + Doctrine2

来自分类Dev

配置中的ZF2 Doctrine2 setFilterSchemaAssetsExpression设置

来自分类Dev

使用ZF2更改Doctrine上的DefaultEntityListenerResolver

来自分类Dev

使用ZF2更改Doctrine上的DefaultEntityListenerResolver

来自分类Dev

缓存WebAPI 2

来自分类Dev

Symfony 2 ESI缓存

来自分类Dev

Web API 2缓存

来自分类Dev

在Symfony2中清除项目中的缓存是否很危险?

来自分类Dev

ZF2翻译

来自分类Dev

zf2导航,如何根据会话隐藏某些项目

来自分类Dev

Doctrine2结果缓存ID

来自分类Dev

ZF2中单个sql查询缓存的正确方法是什么?

来自分类Dev

适用于APC的ZF2 PHP5.5缓存存储替代品

来自分类Dev

将前缀添加到缓存的ZF2转换文件

来自分类Dev

Yii2 ActiveRecord缓存

来自分类Dev

Symfony2缓存问题

来自分类Dev

ZF1的getPathInfo()方法的ZF2等效项是什么?

来自分类Dev

在Yii 2项目中配置Braintree

来自分类Dev

Symfony 2项目中的Angularjs模板