Есть апи написанное на люмене. Запрос кучи заказов генерирует большой объем данным (в процессе сборки ресурса подтягиваются еще куча данных, в том числе 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);
получаю пустоту. Быть может я не правильно понимаю концепцию тэгов ? без них трудно будет обойтись, т.к. к одному ордеру будет привязываться несколько кешей и будет необходимость чистить все что связано с конкретным ордером.