---
title: "remember() - кешування результатів запитів"
url: https://laravelukraine.com/blog/remember-kesuvannia-rezultativ-zapitiv
author: "Олексій Бабінцев"
date: 2026-06-26
---

# remember() - кешування результатів запитів

Той самий запит виконується 100 разів за секунду. База даних потіє.

Закешування результатів. Звернись до бази один раз, обслуговуй з кешу.

**Спосіб Laravel:**

Використовувати `remember()` на запитах. Автоматично кешує результати з тегами.

**Коли кешувати:**

- Дані змінюються рідко (категорії, налаштування)
- Дорогі запити (join'и, агрегація)
- Сторінки з високим трафіком

**Інвалідація кешу:**

Очищати кеш коли дані змінюються використовуючи події моделі.

Порада: Використовувати короткий час кешування (5-15 хвилин) для даних що змінюються іноді.

```php
// ПОГАНО: Звертається до бази кожен раз
$categories = Category::all();

// ДОБРЕ: Кеш на 1 годину
$categories = Cache::remember('categories', 3600, fn() =>
    Category::all()
);

// Використання query builder
$activeUsers = User::where('active', true)->remember(600)->get(); // 10 хвилин

// Кеш з тегами
$posts = Cache::tags(['posts', 'homepage'])
    ->remember('posts.featured', 3600, function () {
        return Post::where('featured', true)->get();
    });

// Інвалідація при події моделі
class Post extends Model
{
    protected static function boot()
    {
        parent::boot();
        static::saved(function () {
            Cache::tags('posts')->flush();
        });
    }
}
```

```php
// Вічний кеш (ручна інвалідація)
$settings = Cache::rememberForever('settings', fn() =>
    Setting::pluck('value', 'key')
);

// Ключ кешу з параметрами
$userId = 5;
$posts = Cache::remember("user_{$userId}_posts", 3600,
    fn() => Post::where('user_id', $userId)->get()
);

// Умовне кешування
if (config('cache.enabled')) {
    $data = Cache::remember('key', 3600, fn() => expensiveQuery());
} else {
    $data = expensiveQuery();
}

// Очистити конкретний кеш
Cache::forget('categories');

// Очистити тегований кеш
Cache::tags(['posts'])->flush();

// Перевірити чи закешовано
if (Cache::has('categories')) {
    $categories = Cache::get('categories');
}
```
