【问题标题】:When my Symfony2 app is using cache, when not? How do I know?当我的 Symfony2 应用程序使用缓存时,什么时候不使用?我怎么知道?
【发布时间】:2015-03-05 10:12:05
【问题描述】:

拥有这个实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="nomencladores.pais", schema="nomencladores")
 * @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\PaisRepository")
 * @UniqueEntity(fields={"nombre"}, message="El pais ya existe en nuestra base de datos")
 */
class Pais
{
    use IdentifierAutogeneratedEntityTrait;
    use NamedEntityTrait;
    use ActiveEntityTrait;
}

还有这个存储库:

class PaisRepository extends EntityRepository
{
    public function getPaises()
    {
        $qb = $this->createQueryBuilder('pais');
        $query = $qb->getQuery();
        $query->useResultCache(true, 3600, 'paises_cache');

        return $query->getResult();
    }
}

并在我的控制器上执行此调用:

/**
 * @Route("/paises", name="paises")
 * @Method("GET")
 */
public function getPaisAction()
{
    $em = $this->getDoctrine()->getManager();
    $entities = $em->getRepository('AppBundle:Pais')->getPaises();

    $response['message'] = "";
    $response['entities'] = [];

    if (!$entities) {
        $response['message'] = "No se encontraron países";
    }

    foreach ($entities as $pais) {
        $paises = array();
        $paises['id'] = $pais->getId();
        $paises['text'] = $pais->getNombre();
        $response['entities'][] = $paises;
    }

    return new JsonResponse($response);
}

config_prod.yml 文件中拥有这个:

doctrine:
    orm:
        metadata_cache_driver: apc
        result_cache_driver: apc
        query_cache_driver: apc

我如何知道我的应用是在使用缓存结果还是一直在执行数据库查询?我正在查看 Symfony2 工具栏(因为我正在开发环境中执行测试),并且一直看到对 paises 表的查询,这让我认为没有使用缓存。

【问题讨论】:

    标签: php symfony caching memcached apc


    【解决方案1】:

    我相信您必须告诉 Doctrine 何时使用配置的缓存驱动程序,如下所示:

    public function getSomeEntities()
    {
        $qb = $this->createQueryBuilder('a');
    
        $qb
            ->where('a.title = "test article"')
            ->orderBy('id', 'ASC')
        ;
    
        $query = $qb->getQuery();
    
        $query->useResultCache(true, 60, 'uniqueCacheId');
    
        return $query->getResult();
    }
    

    您还可以指定使用查询缓存:

    $query->useQueryCache(true);
    

    您可以在Doctrine\ORM\Query class documentation 中看到useQueryCache 函数接受单个布尔参数,而useResultCache 具有以下参数:

    useResultCache( boolean $bool, integer $timeToLive = null, string $resultCacheId = null )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2011-06-09
      • 2015-06-21
      • 2021-09-18
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多