Задать вопрос

Почему данные не достаются из кеша?

Есть апи написанное на люмене. Запрос кучи заказов генерирует большой объем данным (в процессе сборки ресурса подтягиваются еще куча данных, в том числе raw запросы в бд). Было решено каждый заказ (order) кешировать, а в качестве кеш драйвера был выбран редис.

$orderIds = $request->list;

// Получаем ордера из кеша
$cachedOrders = Cache::tags($orderIds)->get('orders-resource') ?? [];

// Ищем айдишники, которых в кеше не было
$nonCachedIds = count($cachedOrders) === 0 ? $orderIds : $cachedOrders->whereNotIn('id', $orderIds);

// Получаем из базы не закешированные ордера
$fromDbOrders =  Order::withTrashed()->with('comments')->findMany($nonCachedIds);

foreach ($fromDbOrders as $order) {
    $orderResourced = OrderResource::make($order)->toArray($request);
    $cachedOrders[] = $orderResourced;
    Cache::tags($order->id)->put(
        "orders-resource",
        $orderResourced,
        Carbon::SECONDS_PER_MINUTE * 10000
    );
}

return response()->json(new Report(
    "200",
    $cachedOrders,
    "Список заказов для базы данных",
    $requestId
));


В редисе я их вижу, но при следующем запросе, пытаюсь вывести закешированные ордера через dd($cachedOrders); получаю пустоту. Быть может я не правильно понимаю концепцию тэгов ? без них трудно будет обойтись, т.к. к одному ордеру будет привязываться несколько кешей и будет необходимость чистить все что связано с конкретным ордером.
  • Вопрос задан
  • 181 просмотр
Подписаться 4 Средний Комментировать
Решения вопроса 1
slowdream
@slowdream Автор вопроса
Тэги для подобного применения непригодны. Использую только для чистки кеша по тэгам.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы