Если твое приложение на Laravel тормозит, особенно на чтении данных, значит, ты не используешь кэш. Да, Eloquent удобен, но каждый запрос к базе — это лишние миллисекунды и нагрузка. Давай разберём, как реально кэшировать запросы и не палить сервер.

Кэширование — это когда ты говоришь Laravel: «Эй, запомни этот запрос, чтобы не дергать базу каждый раз». Особенно полезно для операций чтения, которые ничего не меняют.

1. Кэширование простых запросов

Самый простой вариант — Cache::remember или Cache::rememberForever.

$users = Cache::remember('users', 60, function () {
    return DB::table('users')->get();
});

Что происходит: первый раз Laravel дергает базу, сохраняет результат в кэш на 60 минут. Второй раз — берёт прямо из кэша, база отдыхает. Всё просто, но работает только если запросы одинаковые.

2. Кэширование с уникальными ключами

Если запросы динамические, например по ID пользователя, используем уникальные ключи:

$user = Cache::rememberForever('user_' . $userId, function () use ($userId) {
    return User::find($userId);
});

Каждому пользователю — свой ключ. Никто не перетирает чужой кэш. Минус: нужно следить, чтобы ключи не росли бесконтрольно.

3. Кэширование прямо на моделях

Есть пакет или подходы, позволяющие писать так:

$users = User::cacheFor(60)->get();
$user = User::where('id', $userId)->cacheFor(60)->first();

Это удобнее, чем руками ковырять Cache::remember, особенно если запросов много и они разного типа. Но важно помнить: любые изменения модели не сбросят кэш автоматически, нужно чистить руками.

Итог

  • Простые запросы — Cache::remember.
  • Динамические — уникальные ключи.
  • Для моделей — cacheFor или аналогичные решения.
  • Всегда контролируй сброс кэша при изменении данных.

Кэшируешь правильно — база отдыхает, пользователи довольны, и ты не ловишь пожары на проде.