Cache::remember() повертає значення з кешу, а якщо його немає - виконує замикання, зберігає результат і повертає.
$categories = Cache::remember('categories:menu', now()->addHour(), function () {
return Category::query()->orderBy('position')->get(['id', 'name', 'slug']);
});
Перший запит за годину піде в базу, решта отримають готовий результат.
Ключ:
- має містити все, від чого залежить результат:
posts:page:3,user:42:stats,products:locale:uk. Забули мову в ключі - українці побачать англійське меню; - з префіксом за сутністю - щоб було зрозуміло, що це, і легко скинути.
Час життя (TTL):
- скільки часу застарілі дані прийнятні для користувача: курс валют - хвилини, меню категорій - години;
rememberForever()- лише коли кеш гарантовано скидають при змінах, інакше застарілі дані житимуть вічно.
Чого уникати:
- кешувати те, що й так швидке: простий запит за первинним ключем часто швидший за звернення до Redis з десеріалізацією;
- кешувати дані конкретного користувача під спільним ключем - це витік чужих даних.