в ответ на корректный запрос? почему корректный - ну, в нескольких тысячах случаев всё ок, а потом то ли нагрузка, то ли еще что - и получаем задвоение в базе
в коде четкий критерий - если получен пустой массив, то создать новый объект
примеров не привожу, слишком тривиально, просто вопрос - такое вообще возможно? другого ничего в голову не приходит...
так тяжело судить, нужно разбираться во всем процессе и когда что у вас проверяется и создается, но в общем случае если у вас операция создания может инициироваться из двух разных потоков - то значит готовьтесь к дублям и ставьте уникальные индексы
отбой, нашел причину... от дублей у нас редис с локами, вызов локера был после запроса к базе - оно там ждёт, когда лок освободится, ну и не перепроверяет, что объект-то уже создан... ну то есть два потока проверили базу - получили зеленый свет, дальше второй застопорился на красном, дождался зеленого и зафигачил второй объект) просто последовательность вызовов поменять надо и всё. а индексы нет, не годятся, там "уникальности" как таковой нет, сложнее немного логика
Обсуждают сегодня