JavaRush /Курси /Python SELF UA /Збереження і кешування даних

Збереження і кешування даних

Python SELF UA
Рівень 34 , Лекція 4
Відкрита

1. Навіщо потрібне кешування?

Отже, студенти, ми підійшли до однієї з найцікавіших частин веб-скрейпінгу — кешування даних. Чому кешування? Тому що це як встановити свій власний "чистий п'ятихвилинний рекорд" у роботі зі скриптами! Давайте розберемось, навіщо це потрібно і як це працює, але по-простому, щоб голова не пішла обертом.

Уявіть собі: ви зробили веб-скрейпінг сайту, отримали всі потрібні дані і завтра хочете їх оновити. Невже знову доведеться занурюватися у нескінченний цикл запитів? Ні, можна обійтися без дублюючої роботи і зберегти дані за допомогою кешування.

Переваги кешування:

  • Швидкість: Кешовані дані доступні швидше, ніж завантаження їх наново з сервера. Це як мати швидкий доступ до улюбленого тістечка: не потрібно знову йти в пекарню, воно вже у вас в холодильнику!
  • Економія: І сервери не перевантажуєте зайвими запитами, і свій інтернет-трафік економите. Халявний бонус!
  • Стійкість: Кешування допомагає справлятися з тимчасовими проблемами з'єднання. Якщо сайт раптом стає недоступним, у вас все одно залишаються дані. Майже як мати запасний парашут.

2. Основи кешування даних

Що таке кеш?

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

Типи кешів:

  • Кеш у пам'яті: Швидкий, але обнуляється при відключенні живлення. Працює як оперативна пам'ять.
  • Файловий кеш: Дані зберігаються на диску, більш стійкі і довговічні.

3. Практичне кешування з Python

Для того щоб кешувати дані в Python, ми можемо використовувати бібліотеку requests. Проте бібліотека requests не підтримує кешування "із коробки". Тут на допомогу приходить requests-cache, яка пропонує легкий спосіб додати кешування до ваших запитів.

Установка бібліотеки

Bash

pip install requests-cache

Налаштування кешування

Давайте налаштуємо кешування у нашому скрипті:

Python

import requests_cache

# Налаштовуємо кеш на SQLite
requests_cache.install_cache('demo_cache', expire_after=180)

import requests

# Відправляємо запит
response = requests.get('https://jsonplaceholder.typicode.com/todos/1')

# Перевіряємо, звідки прийшла відповідь
print(f'From cache: {response.from_cache}')

# Виводимо дані
print(response.json())

По-перше, ми встановлюємо кеш, звертаючись до requests_cache.install_cache. Це створить базу SQLite для зберігання кешованих даних. Параметр expire_after вказує час (у секундах), після якого кешовані дані будуть видалені. Тут ми налаштували кешування на три хвилини.

Особливості кешування

Коли ви знову запустите цей код, зверніть увагу на response.from_cache. Ця змінна дорівнюватиме True для наступних викликів протягом перших трьох хвилин.

Видалення кешу

Видалити кеш просто: видаліть файл бази даних або використайте метод requests_cache.clear(), щоб очистити всі записи з вашого кешу.

4. Розширені можливості кешування

Кешування з умовою

Іноді вам може знадобитися більш контрольоване кешування. Наприклад, вам не потрібно кешувати дані, якщо вони вже застаріли або при зміні параметрів запиту.

Для таких випадків можна використовувати requests-cache з додатковими параметрами:

Python

requests_cache.install_cache('custom_cache',
             allowable_methods=['GET', 'POST'],
             allowable_codes=[200, 404],
             ignored_parameters=['timestamp'])

Тут ми дозволяємо кешування для методів GET і POST та тільки для відповідей з кодами 200 і 404. Ми також ігноруємо параметр timestamp, щоб запити з різними часовими мітками не вважалися різними.

Робота з Redis

Якщо вам потрібне більш потужне рішення, наприклад, підтримка розподіленого кешування, ви можете використовувати redis. Це система кешування даних на основі пам'яті, популярна у світі великих даних.

Етапи роботи:

  1. Встановіть Redis і бібліотеку Python:
    Bash
    
    brew install redis  # для користувачів macOS
    pip install redis
    
  2. Налаштуйте Redis у вашому проекті:
    Python
    
    import redis
    import requests
    
    r = redis.Redis(host='localhost', port=6379, db=0)
    
    def get_cached_response(url):
        if r.get(url):
            return r.get(url).decode('utf-8')
        else:
            response = requests.get(url)
            r.setex(url, 3600, response.text)  # кешуємо на 1 годину
            return response.text
    
    print(get_cached_response('https://jsonplaceholder.typicode.com/todos/1'))
    

Цей приклад використовує Redis для зберігання відповідей протягом години. Ми перевіряємо, чи є дані у кеші, і тільки у випадку їх відсутності виконуємо HTTP-запит.

5. Обробка помилок

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

Приклад коду для ведення логів:

Python

import logging

logging.basicConfig(level=logging.INFO)

try:
    response = get_cached_response('https://jsonplaceholder.typicode.com/todos/1')
    logging.info("Дані успішно отримані з кешу")
except Exception as e:
    logging.error("Помилка під час отримання даних: %s", str(e))

Завершальні думки

Кешування — це не просто інструмент для прискорення роботи. Це спосіб зробити ваші застосунки більш надійними і стійкими до тимчасових збоїв у мережі або при перевантаженні серверів. Використання таких інструментів, як requests-cache або redis, дозволяє ефективно керувати запитами і зберігати дані для подальшого використання. Будьте кеш-гуру і не перевантажуйте свої скрипти зайвими запитами! І, як кажуть у старій програмістській приказці: "Краще один раз закешувати, ніж сто разів перепитувати".

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