Cuando se agrega un bloqueo de lectura a un dato, este dato tiene y solo se puede agregar un bloqueo de lectura. No se permiten bloqueos exclusivos ni bloqueos de escritura.
Cuando se agrega un bloqueo de escritura a un dato, no se puede agregar un bloqueo de escritura o un bloqueo de lectura a este dato.
Clasificación de bloqueo | descripción general | muestra | Escenas a utilizar |
bloqueo pesimista | El bloqueo pesimista mantiene un estado conservador para los datos modificados por el mundo exterior (pesimista) Por lo tanto, durante todo el proceso de procesamiento de datos, los datos están bloqueados A menudo se basan en el mecanismo de bloqueo proporcionado por la base de datos para lograrlo. Se puede entender como: bloqueo pesimista, la actitud es pesimista, siempre piensa que los datos Provocará conflictos durante el procesamiento, por lo que los datos a modificar quedarán bloqueados |
Bloqueos de fila, bloqueos de página, bloqueos de tabla, bloqueos compartidos (bloqueos de lectura) bloqueo exclusivo (bloqueo de escritura) |
escribe más, lee menos Garantice la seguridad de los datos |
candado optimista | El bloqueo optimista cree que los datos no causarán conflictos durante el procesamiento Por lo tanto, cuando los datos sean enviados y actualizados, se actualizarán formalmente. Si los datos entran en conflicto o no, si ocurre un conflicto, entonces Devolver un mensaje de error al usuario y dejar que el usuario decida qué hacer |
Bloqueo optimista de base de datos, bloqueo optimista de caché | Lea más, escriba menos, mejore el rendimiento |
El motivo del alto rendimiento del bloqueo optimista: la tabla solo se bloquea en el momento en que se actualizan los datos
Esquema de implementación de bloqueo optimista de base de datos:
Ventajas: simple y eficiente, estable y fiable.
Desventajas: baja concurrencia
1. Realizado por número de versión
Modifique la estructura de la tabla y agregue una columna de versión. Cada vez que se actualiza el inventario, el número de versión es +1.
update goods_info set amount = amount - #{buys} , version = version + 1
where code = #{code} and version = #{version}
2. A través del control estatal
Juzgar que el inventario menos la cantidad de compra es mayor que 0
update goods_info set amout = amout - #{buys}
where code = #{code} and amout-#{buys} >0
Esquema de implementación de bloqueo optimista de caché:
Uso del mecanismo CAS (Comparar e intercambiar)
Análisis de pasos: leer datos ---> comparar datos----> actualizar datos
Análisis de escenario: Escenario de picos
La escena seckill incluye: agarrar boletos, seckill de productos básicos, agarrar sobres rojos y reservas en línea. . .
Características de seckill:
1. Lea más y escriba menos: como comprar boletos, 6000 personas vienen a comprar 200 boletos
2. Alta concurrencia a corto plazo y presión de carga pesada
3. La competencia de recursos es limitada, no se puede vender más, no se puede vender menos, no se puede revender
De acuerdo con las características de seckill, el bloqueo optimista se puede utilizar para controlar la operación de inventario.
service-----Modificar proceso de método de inventario:
Obtener objeto de inventario de productos básicos --- obtener inventario de productos básicos --- juzgar si el inventario es suficiente (si el inventario es menor que el monto de compra actual) --- obtener el número de versión
---Actualizar el inventario con el número de versión ---El subproceso actual que no se actualiza duerme (el tiempo de suspensión es aleatorio) ---Llama recursivamente al método de modificación del inventario
Realizar seckill basado en caché---realizar mecanismo CAS