Doctrine - проблема с построителем запросов, использующим ResultCache и redis - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь настроить кэш redis на результат некоторых сложных запросов

Поэтому я настраиваю свой redis и читаю документацию, использую метод useResultCache (см. Ниже) и вижу, что он сохраняетон должен перерисовываться, как я хочу, так что я думаю, что все прошло хорошо, но когда я проверил вызываемый sql, я обнаружил, что доктрина запускает запрос, даже если есть кэш!измените это.

Так что я думаю, кстати, я могу вручную сохранить объекты в Redis, поэтому я сделал это: кажется, работает, за исключением отложенной загрузки не работает!Ой, я искал и обнаружил, что это только потому, что сущности не привязаны к ORM, поэтому я объединяю каждый результат, и это, кажется, работает лучше, но ... В некоторых местах доктрина вызывает иностранные сущности, которые он уже должен иметь впамять, и не загружает результат.Возможно, он не объединяет суб-сущности, я не знаю.

Первая попытка

$query = $this->repository->findSomethingQuery()
    >getQuery();
$result = $query->useResultCache(true, $this->cacheTTL, $key);
$result = $query->getResult();

Другая попытка

$contains = $this->predisCache->contains($key);
if ($contains) {
    $result = $this->predisCache->fetch($key);
    //attach entities to orm
    $this->mergeResult($result);
    return $result;
}
$result = $this->repository->findSomethingQuery()
            ->getQuery()
            ->getResult();
$this->predisCache->save($key, $result, $this->customerCacheTTL);
return $result;

Я думаю, что лучшие все еще используютметод доктрины, но я все еще не понимаю, чего не хватает.

...