Explicar
Esa es una race condition
.
¿Qué es una condición de carrera?
Solución:
Hay muchas formas de evitar el conflicto de datos en este caso, un bloqueo es una opción.
Puede bloquear en el nivel de la aplicación o en el nivel de la base de datos... pero prefiero que lea este hilo antes de elegir cualquiera de ellos.
Bloqueo optimista frente a pesimista
Solución rápida:pessimistic-lock
https://www.npmjs.com/package/redis-lock