Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo implementa Redis el bloqueo distribuido

Cómo implementa Redis el bloqueo distribuido

Recientemente me he obsesionado con Redis, ¿por qué? Siento que Redis es realmente muy poderoso. Es una base de datos de almacenamiento de valores clave basada en el sistema de memoria. Tiene tantas funciones y es tan popular que en realidad usa un poco de Redis. Se puede decir que Redis es un muy buen punto a favor.

¿Por qué necesitamos bloqueos distribuidos?

En la actualidad, muchos proyectos a gran escala se basan en la distribución, y la coherencia de los datos en escenarios distribuidos siempre ha sido un problema que no se puede ignorar. ¿Conoce la teoría CAP distribuida?

La teoría CAP cree que cualquier sistema distribuido no puede satisfacer la coherencia (Consistencia), la disponibilidad (Disponibilidad) y la tolerancia de partición (Tolerancia de partición) al mismo tiempo, y solo puede satisfacer estas dos al mismo tiempo.

Lo que nuestro sistema debe satisfacer en última instancia es la coherencia máxima. A algunas personas les gusta preguntar sobre la coherencia final desde la perspectiva de las transacciones distribuidas, mientras que otras prefieren los bloqueos distribuidos.

Pero Fan eligió usar caché para implementar bloqueos distribuidos, que es el Redis que usamos con más frecuencia en nuestros proyectos. Hablando de Redis, realmente se puede usar en demasiados lugares, como:

Hoy usaremos Redis para implementar bloqueos distribuidos y aprenderemos cómo usarlos.

1. Prepárese para usar el paquete jar Jedis e importe el paquete jar al proyecto.

jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime); esta postura de bloqueo es lo que más debemos comprender; de lo contrario, no sabrá cómo usarla.

clave: la clave que se bloqueará es en realidad equivalente a una bandera única. Diferentes empresas pueden usar diferentes banderas para bloquear.

requestId: esto en realidad se usa para identificar qué solicitud está bloqueada, porque en el bloqueo distribuido, una cosa que debemos saber es que la persona que bloquea y la que desbloquea debe ser la misma. Solo el cliente hacer.

Otro clásico es que B libera el bloqueo de A, lo que provoca un caos de liberación. Si no se agrega la misma solicitud, el subproceso A ejecuta el bloqueo al procesar el negocio y el tiempo de vencimiento del bloqueo es de 5 segundos. El hilo intenta adquirir el bloqueo. Si A procesa el negocio durante más de 5 segundos, A comienza a liberar el bloqueo, pero B no detecta el bloqueo en este momento, por lo que A bloquea y B bloquea. y la cerradura está bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada, bloqueada. bloquear, bloquear, bloquear, bloquear, bloquear. Si B no detecta el bloqueo, entonces se agrega el bloqueo y A no ha terminado de procesar el negocio. Si libera el bloqueo después de procesar el negocio, entonces el bloqueo agregado por B se libera o no hay forma de liberarlo. bloquear en absoluto.

SET_IF_NOT_EXIST: Literalmente significa que si la clave no existe, realizamos la operación Set; si la clave existe, no hacemos nada y no agregamos un candado.

SET_WITH_EXPIRE_TIME: si expira

expireTime: este es un tiempo de vencimiento establecido para la clave en caso de que su empresa haya sido bloqueada y luego la empresa deba bloquearse en el futuro. , puedes hacerlo directamente. ¿No sería bueno mantener este candado todo el tiempo y no liberarlo después del tiempo de vencimiento?

El método anterior tryGetDistributedLock es el método que usamos habitualmente para agregar bloqueos.

Cuando vea este script, se sentirá un poco extraño, pero en realidad es un script Lua, y el significado de un script Lua es relativamente simple.

De hecho, algunas personas dirán: "¿No puedes simplemente borrarlo? Tu jefe te romperá las piernas si haces eso".

Este método de desbloqueo sin determinar primero el propietario del candado da como resultado que cualquier cliente pueda desbloquearlo en cualquier momento es decir, aunque no haya puesto el candado, puedo abrirlo. ¿Cómo es esto posible? ¿Qué pasa con Tong?

Aquí hay un fragmento de código que puede usar. Es relativamente simple, pero puede usarse directamente en su proyecto.

Primero conozcamos este método de implementación y luego. Hablaremos de eso. Hablemos de los conocimientos teóricos que todos menos quieren ver. Después de todo, estos conocimientos teóricos a menudo se preguntan durante las entrevistas.

Teoría CAP distribuida:

El profesor Eric Brewer de la Universidad de California, Berkeley propuso la conjetura CAP en la conferencia ACM PODC, dos años después, Seth Gilbert y Nancy del Instituto de Massachusetts. of Technology Lynch demostró teóricamente CAP, haciendo de la teoría CAP un teorema reconocido en el campo de la computación distribuida.

En otras palabras, la teoría CAP se ha convertido en un teorema reconocido en el campo de la computación distribuida.

En otras palabras, hace veinte años, la teoría CAP era sólo una conjetura. Pero dos años después, se confirmó y ahora tenemos algo en qué pensar, en lugar de simplemente pensar, cuando pensamos en la computación distribuida.

¿Qué es la teoría CAP distribuida?

Un sistema distribuido sólo puede satisfacer como máximo dos de los tres criterios de coherencia (Consistencia), disponibilidad (Disponibilidad) y tolerancia de partición (Partition tolerante) al mismo tiempo

Esto es diferente de la atomicidad (Atomicidad) no es lo mismo, porque algunas personas dicen que A y las transacciones de la base de datos en la teoría CAP son diferentes de las transacciones en la teoría CAP. A en teoría CAP y A en transacciones de bases de datos son iguales, pero las palabras son diferentes ¿Pueden ser iguales?

Disponibilidad: La A en distribuido significa disponibilidad, es decir, el servicio está siempre disponible con tiempos de respuesta normales.

Cuando construyes un sistema distribuido, debes asegurarte de que cada nodo sea estable; de ​​lo contrario, no se garantizará su disponibilidad y no se distribuirá. Solo puedes llamarlo pseudodistribuido.

Consistencia: Consistencia

En otras palabras, después de que su operación de actualización sea exitosa y se devuelva al cliente, los datos de todos los nodos al mismo tiempo son completamente consistentes si usa Redis. Para la visualización de datos, muchos entrevistadores le preguntarán, ¿cómo se garantiza la coherencia de la base de datos y el caché?

Después de todo, si solo se lee, no hay problema cuando se actualiza el diseño, ya sea escribiendo en la base de datos primero y luego eliminando el caché o eliminando el caché primero; Al escribir en la base de datos, pueden producirse inconsistencias en los datos.

Entonces, si estás interesado en esto, puedes investigar lo siguiente:

Si puedes dejar todo esto claro al entrevistador durante la entrevista, al menos se sentirá como si Debería poder alcanzar sus propios requisitos salariales.

Tolerancia a fallos de partición: Tolerancia a fallos de partición

Cuando un sistema distribuido encuentra un fallo en un nodo o en una partición de red, aún puede proporcionar servicios externos que cumplan con la coherencia y la disponibilidad.

De hecho, en la teoría CAP, no hay forma de satisfacer las tres características de coherencia, disponibilidad y tolerancia de partición al mismo tiempo, por lo que se requiere una compensación.

¿Has entendido el uso de los bloqueos distribuidos de Redis?

Aprendiste mucho sobre el uso de bloqueos distribuidos de Redis, ¿no?