как правильно кешировать в Redis отсортированные страницы c пагинацией? Laravel

http://127.0.0.1:8000/pokraska вот так закешируется с пагинацией если переходить по страницам

$painters = Redis::remember('painters.' . $request->page ?? 1, $minutes, function () {
  return Painter::all();
});

а если выбрать фильтр то url будет типа http://127.0.0.1:8000/pokraska?area=2121&city=116&price=asc&rating=asc или некоторые пустые будут параметры к примеру http://127.0.0.1:8000/pokraska?area=&city=&price=&rating=

Как правильно кешировать чтобы кешировало только те параметры, которые уже открывались а если какое то изменить параметр к примеру город то должна же открыться страница не из кеша а из БД, так как страница с таким городом не была закеширована и как закешировать еще и её тогда?


Ответы (1 шт):

Автор решения: gregman

Первый запрос - кеш пустой. Формируешь ключ на основании параметров запроса $cacheKey = md5(request()->toArray()), сохраняешь результат из базы в кеш.

Второй зарос - параметры изменились? Да, ключ будет новый, в кеше пусто, запрос пойдет в базу. Нет, результат возьмется из кеша.

→ Ссылка