我似乎无法让memcached在zend 2中使用doctrine 2。 memcached到位似乎根本没有影响性能。我觉得它不起作用。 这是我的设置:
module.config.php
'doctrine' => array(
'configuration' => array(
'orm_default' => array(
'metadata_cache' => 'my_memcache',
'query_cache' => 'my_memcache',
'result_cache' => 'my_memcache'
)
),
'service_manager' => array(
'factories' => array(
'doctrine.cache.my_memcache' => function ($sm) {
$cache = new \Doctrine\Common\Cache\MemcachedCache();
$memcached = new \Memcached();
$memcached->addServer('127.0.0.1', 22222);
$cache->setMemcached($memcached);
return $cache;
},
),
)
Controller.php这样
public function get($id)
{
$product = $this->getEntityManager()->createQuery('
SELECT p,pc,fs,f
FROM ProductMod\Entity\Product p
LEFT JOIN p.prices pc
LEFT JOIN p.formats fs
LEFT JOIN fs.format f
WHERE p.id = :id
AND p.hide = false
')->setParameters(array('id' => $id))->useResultCache(true, 500, 'product'.$id);
return $product->getArrayResult();
}
我已经测试了memcached是否在php中使用存储一些测试数据的测试脚本工作正常。
更新,这对我有用,但我仍然想知道如何使用useResultCache。
$mcache = $this->getServiceLocator()->get('doctrine.cache.my_memcache');
if($mcache->contains('product'.$id))
{
echo'cached';
$result = $mcache->fetch( 'product'.$id );
}
else
{
$product = $this->getEntityManager()->createQuery('
SELECT p,pc,fs,f
FROM ProductMod\Entity\Product p
LEFT JOIN p.prices pc
LEFT JOIN p.formats fs
LEFT JOIN fs.format f
WHERE p.id = :id
AND p.hide = false
')->setParameters(array('id' => $id));
$result = $product->getArrayResult();
$mcache->save('product'.$id, $result, 500);
}
return $result;