Как получить значение из кеша Symfony без обратного вызова?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как получить значение из кеша Symfony без обратного вызова?

Сообщение Anonymous »


Ситуация

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

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

Намеченная логика

Клиент загружает страницу товара, содержащую 10 товаров. Из этих 10 товаров 6 уже хранятся в кеше. Поэтому вместо того, чтобы запрашивать API для всех 10 продуктов, я хочу отправить только 4 некэшированных идентификатора продуктов.

Когда ответ получен, запись в кэше должна быть добавлена ​​для 4 некэшированных продуктов.

Проблема

Я пытаюсь использовать контракт кэша Symfony \Symfony\Contracts\Cache\CacheInterface. Этот интерфейс имеет только следующий метод получения записей кэша:

/** * Извлекает значение из пула или вычисляет его, если оно не найдено. * * При промахах в кэше вызывается обратный вызов, который должен вернуть недостающее значение. * Этому обратному вызову предоставляется экземпляр PSR-6 CacheItemInterface, соответствующий * запрошенный ключ, который можно использовать, например. для контроля срока годности. Это также могло бы * быть экземпляром ItemInterface, когда необходимы его дополнительные функции. * * @param string $key Ключ элемента, который необходимо получить из кэша. * @param callable|CallbackInterface $callback Должен возвращать вычисленное значение для данного ключа/элемента. * @param float|null $beta Число с плавающей запятой, которое по мере своего роста контролирует вероятность срабатывания. * досрочный срок годности. 0 отключает его, INF вызывает немедленное истечение срока действия. * Значение по умолчанию (или значение null) зависит от реализации, но должно * обычно составляет 1,0, что должно обеспечить оптимальную защиту от давки. * См. https://en.wikipedia.org/wiki/Cache_sta ... expiration. * @param array &$metadata Метаданные кэшированного элемента {@see ItemInterface::getMetadata()} * * @throws InvalidArgumentException Когда $key недействителен или $beta отрицательна */ публичная функция get (строка $key, вызываемый $callback, float $beta = null, массив &$metadata = null): смешанный; Согласно контракту невозможно получить значение кэша без предоставления вызываемого объекта для вычисления значения кэша.

Но это несовместимо с моей предполагаемой логикой. Чтобы определить, какие продукты запрашивать у API, мне сначала нужно получить записи кэша без обратного вызова.

Теоретически я мог бы напрямую использовать классы, реализующие CacheInterface (адаптер), но, на мой взгляд, это очень плохое решение.

Вопрос

Есть ли какие-либо другие решения, кроме использования адаптера напрямую для получения записей кэша без обратного вызова?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»