Когда мое приложение Symfony2 использует кеш, когда нет? Откуда мне знать?

0

Наличие этого объекта:

/**
 * @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 (потому что я выполняю тест в среде dev), и все время я вижу запрос таблицы paises что заставляет меня думать, что кеш не используется.

Теги:
caching
memcached
apc

1 ответ

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 вы можете увидеть, что функция useQueryCache принимает один логический параметр, а useResultCache имеет следующие параметры:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню