Вступить в клуб →
средняявопросКэш, очереди и надёжность сервисов

Запросы несуществующих товаров проходят мимо кэша и грузят базу

def get_product(product_id):
    cached = redis.get(f"product:{product_id}")
    if cached:
        return json.loads(cached)
    product = db.fetch_product(product_id)
    if product:
        redis.set(f"product:{product_id}", json.dumps(product), ex=600)
    return product

Парсер конкурента перебирает id подряд, большинства товаров не существует. Нагрузка на базу выросла в десять раз, хотя процент попаданий в кэш для настоящих товаров высокий. Почему и что сделать?

  • Отсутствие товара не кэшируется — закэшировать пустой ответ с коротким TTL
  • Увеличить TTL существующих товаров с 10 минут до суток
  • Кэшировать товары при старте сервиса целиком, а не по запросу
  • Заменить redis.get на redis.exists, он работает быстрее

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела