使用symfony2在doctrine2中缓存和无效db请求的最佳做法是什么?

时间:2016-04-01 15:42:33

标签: php symfony caching doctrine-orm

我有一个来自存储库的奇怪代码 “Ocramius(一个Doctrine2 devel)也在这里说https://groups.google.com/d/msg/doctrine-user/RIeH8ZkKyEY/HnR7h2p0lCQJ

    public function findAll()
    {
        /* @var $query \Doctrine\ORM\Query */
        $query = $this->getEntityManager()->createQuery();

        if ($query->getQueryCacheDriver()->contains('cache_key')) {
            return $query->getQueryCacheDriver()->fetch('cache_key');
        }

        $query = $this->getEntityManager()
            ->createQuery(
                'SELECT c FROM AppBundle:Culture c'
            );

        try {
            $results = $query->getResult();
            $query->getQueryCacheDriver()->save('cache_key', $results, 300);
            return $results;
        } catch (\Doctrine\ORM\NoResultException $e) {
            return null;
        }
    }

我不想使用$ query-> useResultCache(true,60,'another_cach_key');因为它解析了请求'SELECT c FROM AppBundle:Culture c',这降低了性能。所以我决定使用QueryCacheDriver。

但要得到它我必须创建空Query! $ query = $ this-> getEntityManager() - > createQuery();

对于控制器中的失效

    $em = $this->getDoctrine()->getManager();
    $em->persist($culture);
    $em->flush();

    // cache invalidation!
    $this->getDoctrine()->getEntityManager()->createQuery()->
    getQueryCacheDriver()->delete('cache_key');

我觉得这段代码闻起来很香。但不知道如何解决它!有人可以建议最佳实践吗?

一般来说,我希望存储我的数据并在某些事件中使其无效。

0 个答案:

没有答案