Memcached在Zend 2中没有使用Doctrine 2

时间:2014-05-28 09:36:58

标签: php doctrine-orm zend-framework2 memcached

我似乎无法让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;

0 个答案:

没有答案