Кешування в Laravel

Оцінка вартості кешування та без кешування

Кешування може значно зменшити час і ресурси, необхідні для обробки запитів. Ось порівняння оціненого часу для поширеного сценарію, наприклад, для отримання 1 000 активних продуктів з бази даних:

Сценарій Час на запит Без кешування ~200 мс З кешуванням ~5 мс

Для високонавантажених додатків це може означати різницю в сотні мілісекунд на запит, що сприяє більш плавному досвіду користувача і знижує навантаження на сервер. За день при 100 000 запитів:

  • Без кешування: ~5.5 годин загального часу обробки
  • З кешуванням: ~8 хвилин загального часу обробки

Ці значні заощадження часу демонструють величезну цінність кешування для ресурсомістких додатків.

Кращі практики

  1. Вибір правильного драйвера: Використовуйте драйвери на основі пам'яті, такі як Redis або Memcached, для високопродуктивного кешування.
  2. Встановлення часу зберігання: Завжди вказуйте час зберігання, щоб уникнути застарілих даних.
  3. Уникати надмірного кешування: Кешуйте лише часто запитувані або обчислювально дорогі дані.
  4. Інвалідовувати застарілі дані: Використовуйте події (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

Leave a Reply

Your email address will not be published. Required fields are marked *