Кешування — це як записник для вашого застосунку. Уявіть, що щоразу, щоб дізнатися котра година, ви переноситесь на інший кінець світу до найточніших атомних годинників. Цікаво, але повільно. Натомість ви дивитесь на наручний годинник — те саме час, але швидше.
Кешування — це процес збереження часто використовуваних даних у швидкому сховищі (наприклад, в оперативній пам'яті), щоб скоротити час доступу до них у майбутньому. Замість звернення до повільного ресурсу, такого як база даних або зовнішнє API, ваш застосунок швидко "зазирне в записник" — у кеш.
Основні переваги кешування
- Швидкість: дані в оперативній пам'яті можна прочитати за долі мілісекунди, тоді як запити до бази даних займають мілісекунди, а іноді й секунди.
- Зниження навантаження на базу даних: коли кеш відповідає на запити, база даних відпочиває. Це особливо важливо для високонавантажених систем.
- Покращення досвіду користувача: ніхто не любить довго чекати. Швидше відкривання сторінок і миттєві відповіді роблять користувачів щасливими.
Сфери застосування кешування
Кешування допомагає в найпоширеніших сценаріях:
- Часто використовувані дані: наприклад, налаштування користувачів або популярні статті на сайті.
- Результати частих обчислень: складні й довгі обчислення можна зберегти в кеші і повторно використовувати.
- API-відповіді: якщо зовнішнє API надає незмінну інформацію (наприклад, погодні дані на конкретний день), можна закешувати результат і не опитувати API постійно.
- Статичні ресурси: HTML-сторінки, зображення та інші файли можна кешувати й роздавати швидше.
Уявіть інтернет-магазин. У нас є сторінка з карткою товару. Кожного разу, коли користувач заходить на сторінку, робиться запит до бази даних, щоб завантажити інформацію про товар, ціни й відгуки. Але що якщо інформація про товар рідко змінюється? Ми можемо її закешувати і повертати користувачу за долі секунди!
Приклади використання кешування
Давайте розберемо кілька реальних прикладів, щоб зрозуміти, де кешування може бути корисним.
Приклад 1: кешування відповідей API
Припустимо, наш FastAPI-застосунок отримує курс валют з зовнішнього API. Запити до цього API займають по 1–2 секунди, і це погано впливає на наш відгук.
import requests
from time import time
# Приклад API-запиту без кешу
def get_exchange_rate():
start = time()
response = requests.get("https://api.exchangerate-api.com/v4/latest/USD")
print(f"Відповідь отримана за {time() - start} секунд")
return response.json()
Тепер уявімо, що ми додали кешування, щоб звертатися до зовнішнього API лише раз на годину:
from cachetools import TTLCache
# Створюємо кеш на 2 елементи з часом життя 3600 секунд (1 година)
cache = TTLCache(maxsize=2, ttl=3600)
def get_exchange_rate():
if "exchange_rate" in cache:
return cache["exchange_rate"]
response = requests.get("https://api.exchangerate-api.com/v4/latest/USD")
cache["exchange_rate"] = response.json()
return cache["exchange_rate"]
Тепер при кожному наступному виклику функції дані будуть доставлятися миттєво з кешу, а не з повільного зовнішнього API.
Приклад 2: кешування статичних ресурсів і сторінок
Кешувати можна не тільки дані, але й цілі HTML-сторінки. Наприклад, WordPress активно використовує кешування, щоб сторінки блогу не рендерилися заново при кожному запиті. Це суттєво знижує навантаження на сервер.
Приклад 3: кешування обчислень
Уявімо, що в нас є складна математична функція:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
Обчислення 40-го числа Фібоначчі займає пристойний час. Ми можемо прискорити процес за допомогою мемоізації (однієї з форм кешування).
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
Тепер результати обчислень будуть збережені, і повторні виклики функції стануть миттєвими.
Висновок: навіщо вам це знати?
У реальній роботі розробника кешування — це не опція, а необхідність. Швидкодія вашого застосунку може стати ключовим фактором успіху, а кешування — ваш головний інструмент у боротьбі за мілісекунди.
Ви будете використовувати кешування для:
- Прискорення API.
- Створення масштабованих систем, які не ламаються під навантаженням.
- Оптимізації обчислень і складних запитів.
У наступній лекції ми познайомимось з Redis — майстром кешування і не тільки. Redis стане нашим головним союзником у боротьбі за швидкість і продуктивність. Після неї ми почнемо його встановлювати і підключати до FastAPI. А поки можете потренуватись на невеликих прикладах, щоб закріпити сьогоднішні ідеї.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ