Redis: кэширование, очереди и ограничение скорости

Backend2026-10-04TryQuickToolBox

Вы создали веб-приложение, которое набирает популярность, но теперь каждая загрузка страницы обращается к базе данных, фоновые задачи накапливаются, а несколько пользователей активно нагружают ваш API. Вам нужно быстрое хранилище данных в оперативной памяти, чтобы справиться с этими вызовами. Redis — это идеальное решение для кэширования, очередей и ограничения скорости. В этой статье мы рассмотрим эти три основных сценария использования с практическими примерами и лучшими практиками.

Почему Redis для кэширования, очередей и ограничения скорости?

Redis — это хранилище «ключ-значение» в оперативной памяти, известное своей скоростью и универсальностью. Он поддерживает богатые структуры данных, такие как строки, списки, множества, сортированные множества и хэши, что делает его идеальным для разнообразных задач. Его атомарные операции и возможности pub/sub дополнительно расширяют его полезность. Будь то снижение нагрузки на базу данных, развязка сервисов или защита API, Redis предлагает простой, но мощный набор инструментов.

1. Кэширование с помощью Redis

Кэширование — самый распространённый сценарий использования Redis. Сохраняя часто запрашиваемые данные в памяти, вы снижаете задержку и нагрузку на базу данных. Функция TTL (время жизни) в Redis автоматически удаляет устаревшие данные.

Как реализовать кэширование

  1. Проверьте кэш: Прежде чем запрашивать базу данных, проверьте, есть ли данные в Redis.
  2. При промахе кэша: Получите данные из базы данных и сохраните результат в Redis с указанием времени жизни.
  3. При попадании в кэш: Верните кэшированные данные напрямую.

Вот пример на Python с использованием redis-py:

import redis
import json

r = redis.Redis(host='localhost', port=6379, db=0)

def get_user(user_id):
    cache_key = f"user:{user_id}"
    cached = r.get(cache_key)
    if cached:
        return json.loads(cached)
    # Имитация запроса к БД
    user = fetch_user_from_db(user_id)
    r.setex(cache_key, 3600, json.dumps(user))  # Кэшировать на 1 час
    return user

Лучшие практики кэширования

2. Очереди с Redis

Списки и сортированные множества Redis позволяют создавать простые, но надёжные очереди сообщений. Они идеально подходят для фоновых задач, очередей задач и обработки событий. В отличие от специализированных брокеров сообщений, очереди Redis легковесны и просты в настройке.

Реализация базовой очереди

Используйте LPUSH для добавления задач и BRPOP для их блокирующего потребления:

# Производитель
r.lpush('job_queue', json.dumps({'task': 'send_email', 'to': 'user@example.com'}))

# Потребитель
while True:
    _, job = r.brpop('job_queue', timeout=30)
    if job:
        process_job(json.loads(job))

Продвинутые очереди с сортированными множествами

Для отложенных задач или очередей с приоритетом используйте сортированные множества, где в качестве оценок выступают временные метки. Потребители извлекают задачи с оценками