Php 在ZF2项目中启用条令2缓存

Php 在ZF2项目中启用条令2缓存,php,caching,zend-framework,doctrine-orm,zend-framework2,Php,Caching,Zend Framework,Doctrine Orm,Zend Framework2,如何在使用Zend Framework 2和Doctrine 2的项目中启用缓存?究竟应该启用什么缓存—条令缓存还是zend缓存 这里是我已经尝试过的,但是没有看到在时间执行中添加的任何差异 module\Application\config\module.config.php 任何帮助、想法或解释都将不胜感激。 谢谢。为了减少不必要的麻烦,当应用程序在生产环境上运行时,一定要在开发时使用array缓存和memcached、redis或apc 您应该将工厂定义放在服务管理器工厂键下,而不是直接放

如何在使用Zend Framework 2和Doctrine 2的项目中启用缓存?究竟应该启用什么缓存—条令缓存还是zend缓存

这里是我已经尝试过的,但是没有看到在时间执行中添加的任何差异

module\Application\config\module.config.php

任何帮助、想法或解释都将不胜感激。
谢谢。

为了减少不必要的麻烦,当应用程序在生产环境上运行时,一定要在开发时使用
array
缓存和
memcached
redis
apc

您应该将工厂定义放在
服务管理器
工厂
键下,而不是直接放在模块配置数组中

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
        ],
    ],
];
几年后为未来读者更新:

我强烈建议您调查一下
在为各种条令组件(如实体管理器、配置或缓存)编写自定义专用工厂之前。作为这个库的贡献者,我可以说它很好地满足了我到目前为止所需要的大多数用例的需求。当您确实需要一家专业工厂时,您可以扩展或组合或装饰提供的工厂,并在其上添加您自己的逻辑。

谢谢您的回复。。。我现在就去做,但是我有一个问题,我怎么知道缓存在工作?你可以尝试从任何服务定位器感知类的条令配置中获取,例如
$config=$this->getServiceLocator()->get('doctrine.configuration.orm_default')
$cache=$config->getQueryCacheImpl()好的,谢谢。我会尝试一下,然后回来获取反馈。。。非常感谢。这就是我从您的建议中得到的所有内容:条令\Common\Cache\memcache对象([memcache:Doctrine\Common\Cache\memcache:private]=>memcache对象([connection]=>Resource id#146)[命名空间:条令\Common\Cache\CacheProvider:private]=>[namespaceVersion:Doctrine\Common\Cache\Cache\CacheProvider:private]=>1)1文件缓存保存的位置?
'service_manager' => [
    'factories' => [
        'doctrine.cache.mycache' => \App\Memcache\Factory::class // implement FactoryInterface
        ],
    ],
];