¿Qué es el bloqueo distribuido de Redis?
Da un ejemplo inapropiado: (Aprendizaje recomendado: video tutorial de Redis)
Supongamos que el recurso compartido es una casa con varios libros dentro si el sistema distribuido quiere ingresar a la casa. Al leer un libro, la cerradura distribuida garantiza que solo haya una puerta en la casa, que solo pueda entrar una persona a la vez y que solo haya una llave en la puerta. Mucha gente quiere leer un libro, está bien, hagan fila, la primera persona con llave abre la puerta, entra a leer un libro y cierra la puerta, luego la segunda persona sin llave espera, y después llega la primera persona. afuera, obtienes la llave Entra, y así sucesivamente
Logra
exclusividad mutua
Asegúrate de que solo un cliente pueda obtener el candado al mismo tiempo, y el bloqueo aún se puede usar en los recursos que *** disfrutan, de modo que se pueden usar en los recursos que *** disfrutan. Es decir, puedes operar en *recursos compartidos
Seguridad
Solo el servicio que agrega el bloqueo puede tener permiso de desbloqueo. Es decir, no puedes permitir a, bcd. El candado agregado está desbloqueado. Si se puede desbloquear, el candado distribuido no tiene sentido.
Lo que puede suceder es que alguien vaya a consultar y descubra que posee un candado y está listo para desbloquearlo, pero de repente. a retiene El candado expira, y luego b adquiere el candado, porque el candado no retiene el candado, y luego b adquiere el candado, porque el candado no retiene el candado, y luego b adquiere el candado.
Esto en realidad pertenece a la implementación de bloqueos distribuidos. Supongamos que redis tiene bloqueos distribuidos.
Suponiendo una operación de bloqueo, la operación se divide en dos pasos:
1. Establezca el conjunto de claves (clave, valor) 2. Establezca el tiempo de vencimiento de la clave
Supongamos que un programa falla justo después de completar la configuración como resultado de no establecer el tiempo de vencimiento para los resultados de la clave. en la contraseña que se pierde. Interbloqueo cuando la clave siempre existe
Cómo implementar bloqueos distribuidos
Hay muchas formas de implementar bloqueos distribuidos. Aquí discutiremos cómo usar redis para implementar. cerraduras distribuidas.
La clave para implementar bloqueos distribuidos es construir un servidor de almacenamiento fuera del servidor de aplicaciones distribuido para almacenar información de bloqueo. Es fácil pensar en Redis. Primero, debemos construir un servidor Redis y usarlo para almacenar información de bloqueo.
Utilice Redis para implementar bloqueos distribuidos
Utilice el comando redis set key value NX EX max-lock-time para implementar el bloqueo
Utilice el comando redis EVAL para implementar el desbloqueo
Varios puntos clave a los que se debe prestar atención durante el proceso de implementación:
1. La información del bloqueo debe expirar y un hilo no puede ocupar un bloqueo por mucho tiempo. tiempo y causa un punto muerto;
2. Solo un hilo puede adquirir el bloqueo al mismo tiempo.
Varios comandos de Redis:
setnx(clave, valor): "establecer si no sale", si el valor de la clave no existe, se agregará correctamente al caché y regresará 1; de lo contrario, devuelve 0.
get(): obtiene el valor clave del valor clave.
getset(key,value): primero obtenga el valor del valor clave, si no existe, devuelva nil, luego actualice el valor anterior al nuevo valor: establezca la fecha de vencimiento del valor clave a segundos.
Para obtener más artículos técnicos sobre Redis, visite la sección Tutorial de introducción a la base de datos de Redis para obtener más información.