Оцінка вартості кешування та без кешування
Кешування може значно зменшити час і ресурси, необхідні для обробки запитів. Ось порівняння оціненого часу для поширеного сценарію, наприклад, для отримання 1 000 активних продуктів з бази даних:
Сценарій Час на запит Без кешування ~200 мс З кешуванням ~5 мс
Для високонавантажених додатків це може означати різницю в сотні мілісекунд на запит, що сприяє більш плавному досвіду користувача і знижує навантаження на сервер. За день при 100 000 запитів:
- Без кешування: ~5.5 годин загального часу обробки
- З кешуванням: ~8 хвилин загального часу обробки
Ці значні заощадження часу демонструють величезну цінність кешування для ресурсомістких додатків.
Кращі практики
- Вибір правильного драйвера: Використовуйте драйвери на основі пам'яті, такі як Redis або Memcached, для високопродуктивного кешування.
- Встановлення часу зберігання: Завжди вказуйте час зберігання, щоб уникнути застарілих даних.
- Уникати надмірного кешування: Кешуйте лише часто запитувані або обчислювально дорогі дані.
- Інвалідовувати застарілі дані: Використовуйте події (Event Listener), щоб очищати кеш, коли змінюються основні дані.
Кешування — потужна техніка для покращення продуктивності та швидкості вашого Laravel-додатку. У цьому посібнику ми розглянемо, як працює кешування в Laravel та як ви можете ефективно використовувати його для зменшення часу завантаження та оптимізації використання ресурсів.
Що таке кешування?
Кешування зберігає часто запитувані дані тимчасово в спеціальному шарі пам'яті для більш швидкого доступу. Завдяки зменшенню потреби у повторних обчисленнях або запитах до бази даних, кешування значно покращує продуктивність.
Система кешування Laravel
Laravel надає уніфікований API для кешування через різні бекенди, такі як:
- File (Файл): Зберігає дані кешу в файловій системі.
- Database (База даних): Зберігає дані кешу в таблиці бази даних.
- Redis: Інструмент для зберігання даних у пам'яті з високою продуктивністю.
- Memcached: Інший інструмент для кешування в пам'яті.
- DynamoDB: NoSQL база даних від AWS.
Ви можете налаштувати драйвер кешу в файлі config/cache.php
:
'cache' => [
'default' => env('CACHE_DRIVER', 'file'),
];
Основи використання кешу
Зберігання елементів у кеші
Щоб зберегти елементи в кеші, використовуйте метод put
:
Cache::put('key', 'value', $seconds);
Отримання елементів з кешу
Отримуйте елементи за допомогою методу get
:
$value = Cache::get('key', 'default_value');
Перевірка існування елемента в кеші
Перевірте, чи існує елемент у кеші:
if (Cache::has('key')) {
// Ключ існує
}
Видалення елементів з кешу
Видалити елемент з кешу можна за допомогою:
Cache::forget('key');
Розширене кешування
Допоміжні функції кешу
Laravel надає допоміжні функції для кешування:
cache(['key' => 'value'], $seconds)
cache('key')
Кешування на завжди
Зберегти елемент назавжди:
Cache::forever('key', 'value');
Примітка: використовуйте `Cache::forget('key') для видалення пізніше.
Теги кешу
Теги дозволяють групувати елементи кешу для ефективнішого керування (підтримується Redis та Memcached):
Cache::tags(['tag1', 'tag2'])->put('key', 'value', $seconds);
Cache::tags(['tag1'])->get('key');
Блокування кешу
Запобігайте умовам гонки за допомогою блокувань:
$lock = Cache::lock('lock-key', 10);
if ($lock->get()) {
// Виконати дію
$lock->release();
}
Очищення кешу
Очистити всі дані кешу:
php artisan cache:clear
Очистити конкретні кеш-сховища:
php artisan cache:clear --store=redis
Практичні приклади
Кешування дорогих запитів
$users = Cache::remember('users', 3600, function () {
return User::all();
});
Логіка кешування перед перевіркою
$data = Cache::get('key');
if (!$data) {
$data = performExpensiveOperation();
Cache::put('key', $data, 600);
}
Списки продуктів для електронної комерції
$products = Cache::remember('product_listings', 1800, function () {
return Product::where('is_active', true)->get();
});
Дані, специфічні для користувача
$userData = Cache::remember("user_profile_" .
auth()->id(), 600, function () {
return auth()->user()->load('profile', 'settings');
});
Динамічні віджети на панелі керування
$widgetData = Cache::remember("dashboard_widget_" . auth()->id(), 300, function () {
return fetchDynamicWidgetData(auth()->id());
});
Висновок
Кешування є необхідним для будь-якого високопродуктивного Laravel-додатку. Розуміючи і ефективно використовуючи систему кешування Laravel, ви зможете покращити продуктивність вашого додатку та досвід користувачів. Почніть з базового кешування і поступово інтегруйте розширені техніки, такі як тегування (tagging) і блокування (locking), для складніших сценаріїв.
Перекладено з: Laravel Cache