Redis aprender - Distributed Lock

Cuando se distribuye efecto de bloqueo. Cuando se usa entre el cliente diferente Redis, usando un reloj o de bloqueo, dependerá del rendimiento del sistema se producen pérdidas que el monitor cuando se accede con frecuencia una clave con el comando reloj, es necesario considerar si las cerraduras.

Piense en lo que los problemas que puede estar antes diseño de la cerradura

Primero tenemos que entender los problemas que puedan surgir a cerraduras de uso:

  • Proceso que tiene el bloqueo, debido a que el tiempo de operación es demasiado largo, lo que llevó al bloqueo se libera automáticamente, pero el proceso en sí mismo no sabe el bloqueo se libera, e incluso puede caer aún más bloqueos de liberación erróneas realizadas por otros procesos.

  • Y tiene la intención de obtener un bloqueo por un largo tiempo para llevar a cabo el proceso de operación se ha derrumbado, pero otros procesos no sé qué proceso está llevando a cabo un bloqueo no puede detectar el proceso que mantiene el bloqueo se ha derrumbado.

  • En un proceso que mantiene el bloqueo expira después de varios procesos al mismo tiempo para adquirir el bloqueo, y se les da una cerradura.

  • Múltiples procesos para adquirir la cerradura, y sólo pensaron que llegue a la cerradura.

redis se puede ejecutar en el último hardware 100.000 operaciones por segundo, pueden realizar 225.000 operaciones por segundo en el hardware de gama alta, por lo que el problema anterior en el caso de alta carga alta concurrente es totalmente posible se produzca.

Diseñar un simple bloqueo v1.0

bloqueo correcta

Utilice setnxel comando es un requisito previo para lograr este bloqueo se consigue en la figura siguiente. 获取锁Función:

Cómo funciona: Cuando una tecla no está presente, estableció un valor de la clave, de lo contrario intentar dentro de un cierto tiempo.

Cuidadosamente cierre de liberación

Cuando está bloqueado, el uso setnxde un conjunto clave uuid, el identificador puede ser liberado cuando el bloqueo se utiliza para reloj monitor, si ID no cambia, sólo para liberar el bloqueo, el mismo id puede asegurar la liberación de la operación de bloqueo no se repetirá repetidamente

La siguiente es una función para liberar el bloqueo:

En lugar de utilizar las cerraduras y ver una comparación de rendimiento de ambos

El código siguiente es redis in actionun caso de libro, una consistencia en la compra de bienes en el mercado para lograr, que se utiliza aquí sólo para conseguir un problema de bloqueo de diseño distribuido consistencia:

En este código dentro del nombre de bloqueo es lock:market, por lo que no es el único bloqueo, puede personalizar los N múltiples cerraduras y luego el autor da una comparación de rendimiento basado en las necesidades del negocio:

Desde la introducción de la cerradura, cada operación es en realidad 市场el objeto en realidad estaba cerrada, así que podemos ver se verá afectada en cierta medida de la cantidad de estantes de mercancías sea menos, pero otros aspectos de la actualización es todavía muy evidente. la razón de esto es 加锁的粒度过大debido a todo el mercado están bloqueados, el impacto será relativamente grande. normalmente, cuando los estantes con tal de que no tiene nada que ver con los artículos que compra, que no deben ser bloqueadas peces.

V2.0 diseñar un bloqueo de grano fino

1.0 mejoras de bloqueo, se reducirá el tamaño de la cerradura, la cerradura sólo para comprar productos, por lo que la competencia por la cerradura de la caída, y luego en las estanterías de mercancía para mejorar el rendimiento de todo el sistema y por lo tanto se incrementarán.

Cuando se utiliza un grano fino comparación cerraduras 1,0 es el siguiente:

El libro no da 2,0 código de bloqueo, sólo el gráfico que muestra el rendimiento de una pluralidad de N Para la selección de grano fino y grano grueso, a menudo se determina de acuerdo con la situación real. No necesariamente de grano fino similares.

diseño de la cerradura con una función de temporización v3.0

Lo anterior no libera el bloqueo cuando el titular de un accidente. Esto dará lugar a un estado de bloqueo ha sido adquirido. Para resolver este problema, tenemos que añadir una función de tiempo de espera de bloqueo.

El diseño de tiempo de espera se basa en los siguientes principios básicos:

  • setnx comando de bloqueo después de la asignación, que se utiliza para bloquear añadir tiempo de expiración de caducidad.

  • Si un programa se bloquea entre setnx simples (caso extremo), otros procesos que intentan adquirir el bloqueo, es necesario comprobar el tiempo restante de la expiración de la cerradura, la cerradura no caduca si encuentra el tiempo, tendrá que volver a añadir un tiempo de expiración de bloqueo. Aunque hay puede haber varios clientes añadidos simultáneamente al bloqueo de tiempo expirado, pero no habrá mucha diferencia entre, por lo que no puede ser considerado.

El código siguiente es una función para adquirir el bloqueo después de la optimización:

Nota: Este fragmento de código relativamente antiguos, nuevos Redis es nx conjunto y las opciones de soporte ex ajustar la hora, por lo que la cantidad de código mucho menos.

El número de lado del cliente diseñar un bloqueo, puede restringir el acceso a los recursos v4.0

Las generaciones anteriores bloquear característica es que cuando el futuro de la cerradura de recursos, la cerradura sólo puede ser ocupado por un proceso de cliente para acceder al recurso, la capacidad de diseñar un bloqueo de este tipo, lo que les permite el acceso a la enésima proceso. Esta cerradura tiene una nombre se llama 计数信号量.

Técnica de semáforos cierto contraste con la cerradura ordinaria, entonces el cliente lo normal cuando se solicita un bloqueo si falla, se va a esperar para seguir aplicando algún tiempo. Si la aplicación cliente cuando el semáforo no, devuelve el recurso es la información de disponibilidad directamente.

El libro también se ha diseñado una escena:

mercado de acceso a los mercados ya no se limita a dentro del juego, pero el proceso puede ser utilizado para acceder al mercado externo, la misma cuenta sólo puede procesar un máximo de cinco acceso.

Feria y semáforo semáforo injusta

Aquí es un concepto relacionado con la emisión de capital. El libro da semáforo diseño es una colección ordenada, el identificador de proceso como miembro de un conjunto ordenado de identificación se añadirá a la marca de tiempo como un conjunto ordenado de las puntuaciones de cada uno después de añadir una colección de procesos, comprobar su rango, si hay más de 5, demuestran que no tienen derecho a adquirir un semáforo, es necesario darse de baja de este conjunto, pero utilizando el valor de marca de tiempo que se produce un problema, diferentes hosts tiempo puede ser diferente.

Con el fin de evitar el fenómeno injusta, por lo general en combinación con un contador, y el valor del contador a través de un algoritmo de cálculo como un conjunto ordenado de las puntuaciones. Pero para el servidor de plataformas de 32 bits Redis, contador propensos a desbordamiento. Así, por esta situación, el papel del contador no es grande.

Supongo que te gusta

Origin www.cnblogs.com/it-dennis/p/12589228.html
Recomendado
Clasificación