Если твое приложение на 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или аналогичные решения. - Всегда контролируй сброс кэша при изменении данных.
Кэшируешь правильно — база отдыхает, пользователи довольны, и ты не ловишь пожары на проде.
0 комментариев