Вступить в клуб →
средняявопросКэш и Redis в Spring

Проверка повторного запроса через Redis иногда пропускает дубли

Чтобы не создавать двойные заказы при повторе запроса, сервис делает так:

if (redis.hasKey("idem:" + key)) {
    return previousResult(key);
}
Order order = createOrder(request);
redis.opsForValue().set("idem:" + key, order.getId().toString(), Duration.ofHours(24));

Когда клиент отправляет два одинаковых запроса почти одновременно, иногда создаются два заказа. Как исправить?

  • Занимать ключ атомарно командой SET NX до создания заказа
  • Уменьшить TTL ключа идемпотентности до одной минуты
  • Проверять наличие ключа дважды — до и после создания заказа
  • Хранить ключи идемпотентности в локальной HashMap

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

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

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

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