El programa Java implementa el bloqueo distribuido

Tres formas de lograrlo:
1. Bloqueo optimista de la base de datos (usando la instrucción SQL);
2. Bloqueo distribuido basado en Redis;
3. Bloqueo distribuido basado en ZooKeeper (alta concurrencia).

Explicación detallada del proceso de bloqueo distribuido basado en Redis: el
bloqueo pesimista
C1 adquiere el bloqueo y se bloquea. Después de que C2 y C3 llamen a SETNX para bloquear y devolver 0, llame al comando GET para obtener la marca de tiempo T1 de foo.lock. Al comparar las marcas de tiempo, se descubre que el bloqueo se agota.
C4 envía un comando GESET a foo.lock,
GETSET foo.lock <hora de unix actual>
y obtiene la marca de tiempo anterior T2 en foo.lock

Si T1 = T2, significa que C4 obtiene la marca de tiempo.
Si T1! = T2, significa que otro cliente C5 había obtenido la marca de tiempo llamando a GETSET antes que C4, y C4 no adquirió el bloqueo. Solo puede dormir e ingresar al siguiente ciclo ( debido a la pequeña brecha de marca de tiempo entre procesos / subprocesos, no afecta la lógica normal).
Nota: Al configurar la clave, también puede establecer un tiempo de espera para resolver el error de tiempo de espera.

Comando optimista de transacción de uso de bloqueo (el nivel es confirmación de lectura)
:
1.multi, abra la transacción de Redis, configure el cliente en el estado de transacción. 
2.exec, envíe la transacción, ejecute la cola de comandos de multi a este comando y configure el cliente como no transaccional. 
3. Descarte, cancele la transacción y configure el cliente como no transaccional. 
4. vigilar, monitorear pares clave-valor, si la transacción monitorea los cambios del par de monitoreo cuando la transacción se envía al ejecutivo, la transacción se cancelará.
5. Desvíe, cancele el monitoreo.
Nota: El nivel de transacción de redis es confirmación de lectura, y otras operaciones también afectarán el resultado de la transacción. Entonces, las transacciones solo se utilizan para garantizar la atomicidad.

Para lograr un bloqueo optimista, solo puede usar el mecanismo de vigilancia. Las instrucciones de vigilancia son las siguientes:
1. La implementación del bloqueo optimista debe basarse en WATCH, y luego usar las transacciones redis.
2. El ciclo de vida del RELOJ solo está relacionado con la transacción. Después de que se ejecuta una transacción, finaliza el ciclo de vida del reloj correspondiente.

31 artículos originales publicados · Me gusta1 · Visitas1166

Supongo que te gusta

Origin blog.csdn.net/quietbxj/article/details/104037625
Recomendado
Clasificación