JavaRush /Курси /Модуль 4: FastAPI /Вступ до кешування: навіщо воно потрібне

Вступ до кешування: навіщо воно потрібне

Модуль 4: FastAPI
Рівень 9 , Лекція 0
Відкрита

Кешування — це як записник для вашого застосунку. Уявіть, що щоразу, щоб дізнатися котра година, ви переноситесь на інший кінець світу до найточніших атомних годинників. Цікаво, але повільно. Натомість ви дивитесь на наручний годинник — те саме час, але швидше.

Кешування — це процес збереження часто використовуваних даних у швидкому сховищі (наприклад, в оперативній пам'яті), щоб скоротити час доступу до них у майбутньому. Замість звернення до повільного ресурсу, такого як база даних або зовнішнє API, ваш застосунок швидко "зазирне в записник" — у кеш.

Основні переваги кешування

  1. Швидкість: дані в оперативній пам'яті можна прочитати за долі мілісекунди, тоді як запити до бази даних займають мілісекунди, а іноді й секунди.
  2. Зниження навантаження на базу даних: коли кеш відповідає на запити, база даних відпочиває. Це особливо важливо для високонавантажених систем.
  3. Покращення досвіду користувача: ніхто не любить довго чекати. Швидше відкривання сторінок і миттєві відповіді роблять користувачів щасливими.

Сфери застосування кешування

Кешування допомагає в найпоширеніших сценаріях:

  • Часто використовувані дані: наприклад, налаштування користувачів або популярні статті на сайті.
  • Результати частих обчислень: складні й довгі обчислення можна зберегти в кеші і повторно використовувати.
  • 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. А поки можете потренуватись на невеликих прикладах, щоб закріпити сьогоднішні ідеї.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ