Как сохранить массив в кеш в Symfony? - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть массив для отображения из базы данных и после многих бизнес-реализаций, который занимает 1–2 минуты, чтобы получить окончательный вывод. Так что этот процесс меня раздражает при тестировании с помощью пользовательского интерфейса. Поэтому я решил сохранить этот окончательный массив в кеш. Я пробовал следующие строки кода для хранения myArray в кеше.

use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Symfony\Contracts\Cache\ItemInterface;

$cache = new FilesystemAdapter();
// The callable will only be executed on a cache miss.
$output = $cache->get('my_cache_key', function (ItemInterface $item) use ($myArray) {
    $item->expiresAfter(7200);

    return $this->serializer->provideSerializer()->serialize($myArray, 'json');
});

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

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

Спасибо.

1 Ответ

1 голос
/ 14 апреля 2020

Вы должны поместить извлечение данных $ myArray в ваш обратный вызов согласно документации и не передавать через use, потому что это означает, что их извлечение выполняется вне цикла выполнения кэша , В строке 11 упоминается, что внутри обратного вызова должны выполняться интенсивные вычисления (или, в вашем случае, длительное извлечение значения из базы данных).

В вашем случае это должно быть примерно так:

$output = $cache->get('my_cache_key', function (ItemInterface $item) {
$item->expiresAfter(7200);

// Your lengthy database query that retrieves data to be cached
return $this->getDoctrine()
    ->getRepository(MyClass::class)
    ->find($id);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...