【Descripción del problema】 Cuando los usuarios usan la APP, la página está muy atascada y harán clic aleatoriamente, porque la interfaz no realiza envíos repetidos, habrá varias solicitudes idénticas; en la capa de servicio, un hilo no inserta completo y el otro hilo se comprueba, vacío. Así que también inserté uno. Originalmente, todos tenían uno, pero un vendedor tenía tres, lo que resultaba en errores de lógica de negocio. Para el procesamiento de envíos maliciosos, puede hacerse en la parte frontal, y también puede haber soluciones maduras en la parte posterior.
【Solución】1. Utilizar restricciones de unicidad para resolver el problema de idempotencia de las transacciones, establecer restricciones de unicidad y, si hay un escenario de commits repetidos, se lanzarán excepciones a las restricciones de unicidad a nivel de base de datos y la lógica de negocio no se destruirá. También son aceptables restricciones de unicidad en la composición de múltiples campos.
El inicio de sesión del hipervínculo es visible.
Lo anterior es para establecer ajustes antiduplicado a nivel de base de datos.
2. Realizar ajustes anti-duplicación a nivel de código. Muchas veces se dice que la restricción de unicidad de la base de datos afectará la eficiencia de la inserción de datos, porque cada inserción requiere un juicio a nivel de base de datos. Por lo tanto, a juzgar por el nivel de código, la práctica común a nivel de código es seleccionar primero y luego insertar, pero si hay un escenario de alta concurrencia, seguirán habiendo commits repetidos. Puedes añadir sincronizado al código lógico, de modo que en escenarios de alta concurrencia, seleccionar primero y luego insertar hará efecto. Pero la eficiencia no es alta, y el paralelo se convierte en serial. Se puede usar un mecanismo de bloqueo DCL. (¿Has comprobado que el método para crear un solo objeto en modo de copia de caso es muy similar, primero juzga si el objeto existe, si no existe, créalo; si no, no lo crees?), el mecanismo natural de bloqueo DCL es más eficiente.
#分布式锁 También se pueden usar cerraduras distribuidas para resolver el problema, como se usan comúnmente por Redis y Zookeeper. Esta sección explica cómo implementar bloqueos distribuidos usando Redis. Existe una operación de comandos setNx en Redis, si no existe, es un valor fijo, y se devuelve 1. Si existe, no se establece y devuelve 0. Utilizando la función de hilo único de Redis, la escena de alta concurrencia se convierte en una serie a través de la cola de mensajes. Sin embargo, hay inconvenientes en las cerraduras distribuidas, así que debes prestar atención.
El inicio de sesión del hipervínculo es visible. 3. ¿Mecanismo MVCC?
3.1 ¿Qué es el mecanismo MVCC? MVCC es un mecanismo de control de concurrencia que abarca múltiples versiones.
3.2 ¿Qué problemas se pueden resolver? El mecanismo de bloqueo puede controlar operaciones concurrentes, pero su sobrecarga del sistema es grande, y el MVCC puede reemplazar los bloqueos a nivel de fila en la mayoría de los casos, lo que puede reducir la sobrecarga del sistema y mejorar el rendimiento.
El inicio de sesión del hipervínculo es visible.
4. También existe un problema de idempotencia en los mensajes
Por ejemplo, ¿cómo evitar el consumo repetido de mensajes?
En el middleware de mensajes en MQ, estos deben entenderse y entenderse.
|