Redis — це простий, потужний і дуже швидкий інструмент для кешування даних. Зберігання даних у оперативній пам'яті дає майже миттєвий доступ. Сьогодні ми навчимося:
- Встановлювати Redis на локальній машині.
- Налаштовувати FastAPI для роботи з Redis.
- Виконувати базові операції через Redis і FastAPI: додавати дані, читати їх і видаляти.
Поїхали!
Встановлення Redis
У Windows
Встановлення Redis на Windows стало трохи складнішим, бо офіційно Redis орієнтований на Linux. Але є обхідний шлях:
- Зайди на https://github.com/microsoftarchive/redis/releases.
- Скачай
redis-x64-{version}.zip. - Розпакуй архів у зручне для тебе місце.
- Зайди в папку, відкрий термінал і запусти сервер:
redis-server.exe
Тепер Redis працює на твоєму комп'ютері. Можеш перевірити його роботу, відкривши інший термінал і ввівши:
redis-cli
Спробуй команду:
PING
Повинен з'явитися відповідь PONG. Це Redis каже: «Привіт, я тут!».
У Linux
Спочатку онови список репозиторіїв:
sudo apt update
Встанови Redis:
sudo apt install redis
Запусти Redis:
sudo systemctl start redis
Перевір його статус:
sudo systemctl status redis
І, звичайно, введи redis-cli і спробуй команду PING, щоб переконатися, що все працює.
Підключення до FastAPI
Тепер, коли Redis встановлений, давай підключимо його до нашого додатка FastAPI за допомогою Python-бібліотеки redis-py. Ця бібліотека дозволяє нам взаємодіяти з Redis з FastAPI просто й зручно.
Для початку встановимо redis-py:
pip install redis
Якщо плануєш використовувати асинхронні операції, рекомендую встановити aioredis:
pip install aioredis
Додамо базове підключення Redis у наш додаток FastAPI. Ось простий приклад:
from fastapi import FastAPI
import redis
app = FastAPI()
# Створюємо підключення до Redis
redis_client = redis.StrictRedis(host="localhost", port=6379, decode_responses=True)
@app.get("/")
def read_root():
# Записуємо значення в Redis
redis_client.set("hello", "world")
# Читаємо значення з Redis
value = redis_client.get("hello")
return {"Redis says": value}
Примітка:
host="localhost"вказує, що сервер Redis працює локально.port=6379— стандартний порт Redis.decode_responses=Trueдозволяє працювати з даними у вигляді рядків, а не байтів.
Асинхронне підключення з aioredis
Якщо ти використовуєш асинхронні операції в FastAPI, то aioredis — твій кращий друг:
from fastapi import FastAPI
import aioredis
app = FastAPI()
# Вказуємо URL підключення до Redis
REDIS_URL = "redis://localhost"
@app.on_event("startup")
async def startup_event():
# Підключаємося до Redis при запуску додатка
app.state.redis = await aioredis.from_url(REDIS_URL, decode_responses=True)
@app.on_event("shutdown")
async def shutdown_event():
# Закриваємо підключення до Redis при завершенні роботи додатка
await app.state.redis.close()
@app.get("/")
async def read_root():
redis = app.state.redis
# Асинхронно записуємо дані в Redis
await redis.set("hello", "world")
# Асинхронно читаємо дані з Redis
value = await redis.get("hello")
return {"Redis says": value}
Що тут нового? Ми використовуємо декоратори @on_event для керування життєвим циклом нашого додатка:
- startup_event: підключаємося до Redis при запуску.
- shutdown_event: закриваємо з'єднання при завершенні.
Перша взаємодія з Redis
Тепер давай спробуємо виконати кілька операцій за допомогою нашої бібліотеки. Ми вже бачили, як додавати і отримувати дані. Давай заглибимося трохи більше.
Запис даних у Redis
redis_client.set("key", "value")
Читання даних з Redis
value = redis_client.get("key")
print(value) # "value"
Видалення даних
redis_client.delete("key")
Лічильники та інкременти.
Redis підтримує вбудовані числові операції:
redis_client.set("counter", 1)
redis_client.incr("counter") # Збільшує значення на 1
print(redis_client.get("counter")) # 2
Приклад з FastAPI
Припустимо, ти хочеш створити просте API для роботи з ключами-значеннями:
@app.post("/set/{key}/{value}")
async def set_value(key: str, value: str):
redis = app.state.redis
await redis.set(key, value)
return {"message": f"Key '{key}' set to '{value}'"}
@app.get("/get/{key}")
async def get_value(key: str):
redis = app.state.redis
value = await redis.get(key)
if value is None:
return {"error": f"Key '{key}' not found"}
return {"value": value}
Спробуй відправити POST-запит на /set/test/123 і потім виконай GET-запит на /get/test. Ти повинен отримати "123".
Типові помилки та підводні камені
Робота з Redis виглядає просто, але є кілька речей, які можуть викликати проблеми:
- Redis-сервер не працює. Переконайся, що сервер Redis запущений. Перевір це командою:
Відповідьredis-cli pingPONGозначає, що сервер працює. - Помилка підключення. Переконайся, що вказані правильні
hostіport. Наприклад, якщо Redis запущений у Docker, хостом може бути127.0.0.1або навіть ім'я контейнера. - TTL і застарілі дані. Якщо ти використовуєш
expireабоsetex, дані можуть раптово зникати. Переконайся, що для критично важливих даних TTL не використовується.
Застосування в реальних проєктах
Підключення Redis до FastAPI відкриває багато можливостей:
- Кешування відповідей API.
- Зберігання сесій користувачів.
- Реалізація лічильників і обмежень за частотою запитів (rate limiting).
- Зберігання тимчасових даних, таких як токени для підтвердження email.
Redis часто використовується в високонавантажених системах. Наприклад, популярні платформи, такі як Twitter і GitHub, використовують Redis для кешування та управління чергами.
Тепер у тебе є базові навички для встановлення Redis і підключення його до FastAPI. У наступній лекції ми розглянемо, як налаштувати кешування запитів до бази даних через Redis, щоб зробити твій додаток ще швидшим.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ