Análisis en profundidad de los principios operativos de bloqueo distribuido y puntos de conocimiento avanzado del marco de Redisson.

Lectura recomendada

Project Combat: mejores prácticas para el reconocimiento OCR de texto con IA

AI Gamma genera un enlace directo a la herramienta PPT con un clic

Reproduzca el artefacto de codificación en línea de Cloud Studio

Juegue con pintura, voz y traducción de IA de GPU, la GPU ilumina el espacio de imaginación de IA

El intercambio de información

Compartir la documentación más completa sobre la difusión estable de pintura con IA de la historia

Pintura AI sobre enciclopedia SD, MJ, GPT, SDXL

Pintura de IA difusión estable Documento GPT oficial de mitad de viaje Recopilación de datos de la enciclopedia AIGC

「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间
https://drive.uc.cn/s/2aeb6c2dcedd4
AIGC资料包
https://drive.uc.cn/s/6077fc42116d4
https://pan.xunlei.com/s/VN_qC7kwpKFgKLto4KgP4Do_A1?pwd=7kbv#

La gestión de bloqueos en sistemas distribuidos siempre ha sido un tema complejo y crítico
. En esta área, el marco Redisson se ha convertido en una de las primeras opciones para los desarrolladores debido a su excelente rendimiento y funcionalidad. Este blog explorará en profundidad el principio operativo de bloqueo distribuido del marco de Redisson y los puntos de conocimiento avanzado involucrados. A través de explicaciones detalladas y códigos de muestra, comprenderá mejor cómo utilizar el marco de Redisson para implementar bloqueos distribuidos en un entorno distribuido.

introducción

En un sistema distribuido, varios nodos deben trabajar juntos para completar tareas, pero en algunos casos, para garantizar la coherencia y corrección de los datos, es necesario introducir bloqueos distribuidos. Redisson es un marco Java basado en Redis que proporciona la implementación de bloqueos distribuidos, no solo es fácil de usar, sino que también tiene un rendimiento excelente. Antes de profundizar en los principios de los bloqueos distribuidos de Redisson, primero comprendamos los conceptos básicos de los bloqueos distribuidos.

Conceptos básicos de cerraduras distribuidas.

Los bloqueos distribuidos son un mecanismo utilizado para controlar el acceso a recursos compartidos por parte de múltiples nodos en un sistema distribuido. Garantiza que en un momento dado, solo un nodo pueda mantener el bloqueo, y solo el nodo que sostiene el bloqueo pueda ejecutar bloques de código críticos. Las cerraduras distribuidas generalmente deben cumplir las siguientes condiciones:

  • Exclusividad mutua: solo un nodo puede mantener el candado al mismo tiempo.
  • Reentrada: permite que el nodo que sostiene el bloqueo adquiera el bloqueo nuevamente después de liberarlo.
  • Seguridad: garantiza que incluso si un nodo falla o la red falla, la cerradura no estará ocupada permanentemente.
  • Alto rendimiento: la adquisición y liberación de bloqueos deben ser operaciones eficientes.

Si bien cumple con estas condiciones, el marco de Redisson también proporciona algunas funciones avanzadas para hacer que los bloqueos distribuidos sean más potentes y flexibles.

Descripción general del marco de Redisson

Redisson es un marco Java basado en Redis que proporciona la implementación de una variedad de objetos y servicios distribuidos, incluidos bloqueos distribuidos, colecciones distribuidas, colas de mensajes distribuidas, etc. Este artículo se centra principalmente en la implementación de bloqueos distribuidos del marco de Redisson.

La cerradura distribuida de Redisson no solo proporciona las funciones de las cerraduras convencionales, sino que también incluye las siguientes características:

  • Bloqueo reentrante : el mismo hilo puede adquirir el mismo bloqueo varias veces.
  • Bloqueo justo : Implementado según el conjunto ordenado de Redis, asegurando que el hilo que espera más tiempo adquiera el bloqueo primero.
  • Enclavamiento : admite la adquisición de múltiples bloqueos al mismo tiempo para evitar interbloqueos.
  • Bloqueo rojo : obtenga bloqueos en múltiples nodos de Redis para garantizar una alta disponibilidad.
  • Bloqueo de lectura y escritura : admite bloqueo de lectura y bloqueo de escritura, lo que permite realizar múltiples operaciones de lectura simultáneamente.

El principio de funcionamiento del bloqueo distribuido de Redisson.

El bloqueo distribuido del marco de Redisson se implementa en función de la estructura de datos de Redis y utiliza principalmente las dos estructuras de datos siguientes:

  • Cadena de Redis (Cadena) : se utiliza para almacenar el titular del candado y el período de validez del candado.
  • Conjunto ordenado de Redis (conjunto ordenado) : se utiliza para implementar operaciones de equidad de bloqueo y liberación de bloqueo.

A continuación profundizaremos en el principio de funcionamiento del bloqueo distribuido de Redisson:

Adquisición de bloqueo

  1. Cuando un hilo intenta adquirir un candado, Redisson crea un par clave-valor de cadena en Redis. La clave es el nombre del candado y el valor es el identificador único del hilo (normalmente el ID del hilo).
  2. Si el candado se adquiere con éxito, Redisson establecerá un tiempo de vencimiento para evitar que el candado esté ocupado durante mucho tiempo. Los tiempos de vencimiento generalmente usan valores aleatorios para evitar conflictos con el tiempo de vencimiento del bloqueo.
  3. Si falla la adquisición del bloqueo, Redisson esperará un período de tiempo y luego volverá a intentarlo. Este tiempo de espera suele ser aleatorio para reducir la contención de bloqueos.

liberación de bloqueo

  1. Cuando un hilo libera un candado, Redisson verifica si el titular del candado coincide con el hilo actual. Si hay una coincidencia, Redisson eliminará el par clave-valor del bloqueo y liberará el bloqueo.
  2. Si el subproceso que sostiene el candado no lo libera después de que expira, otros subprocesos pueden intentar adquirir el candado.

bloquear la equidad

El bloqueo justo de Redisson se implementa mediante colecciones ordenadas. Cada candado corresponde a un conjunto ordenado, los miembros del conjunto son subprocesos que esperan el candado y la puntuación es la marca de tiempo de espera del subproceso. Al adquirir un candado, Redisson agrega subprocesos a una colección ordenada, ordenada por marca de tiempo. Cuando se libera el bloqueo, Redisson eliminará el hilo del conjunto ordenado para que el hilo que espera más tiempo adquiera el bloqueo, logrando así la equidad.

Puntos de conocimiento avanzado

Además de los principios básicos de los bloqueos distribuidos, el marco de Redisson también incluye algunos puntos de conocimiento avanzado que pueden ayudarlo a comprender y utilizar mejor los bloqueos distribuidos de Redisson:

1. entrelazado

El enclavamiento de Redisson permite adquirir múltiples bloqueos al mismo tiempo para evitar situaciones de punto muerto. Cuando varios subprocesos necesitan adquirir varios bloqueos, se puede evitar eficazmente el punto muerto si los bloqueos se adquieren en el mismo orden.

Código de muestra:

RBatch batch = redisson.createBatch();
RLock lock1 = batch.getLock("lock1");
RLock lock2 = batch.getLock("lock2");

batch.execute();

boolean hasLocks = redisson.getLock(lock1, lock2);
if (hasLocks) {
    
    
    try {
    
    
        // 执行需要锁保护的代码
    } finally {
    
    
        redisson.unlock(lock1, lock2);
    }
}

En el ejemplo anterior, solíamos RLockcrear dos objetos de bloqueo y solíamos redisson.getLock()adquirir estos dos bloqueos. Luego, antes de ejecutar el bloque de código que necesita protección de bloqueo, solemos redisson.unlock()liberar ambos bloqueos. De esta manera, se asegura de que no se produzca ningún punto muerto al adquirir varios bloqueos.

2. candado rojo

El candado rojo de Redisson es un candado distribuido de alta disponibilidad que puede adquirir bloqueos en múltiples nodos de Redis para garantizar que incluso si algunos nodos fallan, los bloqueos se puedan adquirir normalmente. La implementación del candado rojo se basa en el algoritmo Quorum, que garantiza que el candado sólo pueda adquirirse cuando la mayoría de los nodos estén disponibles.

Código de muestra:

RRedLock redLock = new RRedLock("lock1", "lock2", "lock3");

boolean hasLocks = redLock.tryLock(10, TimeUnit.SECONDS);
if (hasLocks) {
    
    
    try {
    
    
        // 执行需要锁保护的代码
    } finally {
    
    
        redLock.unlock();
    }
}

En el ejemplo anterior, RRedLockcreamos un objeto de candado rojo usando y luego redLock.tryLock()intentamos adquirir el candado usando. Si la mayoría de los nodos adquieren con éxito el bloqueo, se ejecuta el código protegido por el bloqueo.

3. Bloqueo de lectura y escritura

Redisson admite bloqueos de lectura y escritura, lo que permite que varios subprocesos lean recursos compartidos al mismo tiempo, pero solo permite que un subproceso escriba recursos. Esto puede mejorar el rendimiento en ciertos escenarios.

Código de muestra:

RReadWriteLock rwLock = redisson.getReadWriteLock("myReadWriteLock");
RLock readLock = rwLock.readLock();
RLock writeLock = rwLock.writeLock();

// 获取读锁
readLock.lock();
try {
    
    
    // 执行读操作
} finally {
    
    
    readLock.unlock();
}

// 获取写锁
writeLock.lock();
try {
    
    
    // 执行写操作
} finally {
    
    
    writeLock.unlock();
}

En el ejemplo anterior, usamos RReadWriteLockpara crear un objeto de bloqueo de lectura y escritura y usamos readLocky writeLockpara adquirir los bloqueos de lectura y escritura respectivamente. De esta manera, varios subprocesos pueden leer el recurso al mismo tiempo, pero solo un subproceso puede escribir el recurso.

Demostración de código de muestra

A continuación se muestra un ejemplo simple que demuestra cómo usar el marco de Redisson para implementar bloqueos distribuidos y cómo usar funciones avanzadas:

public class DistributedLockDemo {
    
    
    public static void main(String[] args) {
    
    
        Config config = new Config();
        config.useSingleServer().setAddress("redis://localhost:6379");

        RedissonClient redisson = Redisson.create(config);

        RLock lock = redisson.getLock("myLock");

        try {
    
    
            boolean isLocked = lock.tryLock(10, 60, TimeUnit.SECONDS);
            if (isLocked) {
    
    
                System.out.println("Lock acquired. Performing some critical task...");
                Thread.sleep(5000); // Simulate some critical task
                System.out.println("Critical task completed.");
            } else {
    
    
                System.out.println("Failed to acquire lock. Another process holds it.");
            }
        } catch (InterruptedException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            lock.unlock();
        }

        redisson.shutdown();
    }
}

En este ejemplo, creamos un cliente Redisson, adquirimos un candado llamado "myLock" y luego intentamos adquirir el candado y realizar tareas clave. Si el bloqueo está retenido por otro hilo, esperará un momento y volverá a intentarlo. Finalmente liberamos el bloqueo y cerramos el cliente Redisson.

en conclusión

A través de la explicación detallada y el código de muestra de este artículo, ahora debería tener una comprensión más profunda de los principios de bloqueo distribuido y los puntos de conocimiento avanzado del marco de Redisson. El marco de Redisson no solo proporciona funciones básicas de bloqueo distribuido, sino que también admite funciones avanzadas como bloqueos reentrantes, bloqueos justos, enclavamientos, bloqueos rojos y bloqueos de lectura y escritura, lo que hace que la gestión de bloqueos distribuidos sea más flexible y confiable.

Si necesita utilizar bloqueos distribuidos para administrar el acceso a recursos compartidos en un sistema distribuido, el marco de Redisson es una solución poderosa y madura. Espero que este artículo te haya resultado útil. Si tienes alguna pregunta o comentario, compártelo en los comentarios a continuación y exploremos juntos los misterios de las cerraduras distribuidas. Al mismo tiempo, si crees que este artículo te resulta útil, dale Me gusta, comenta y compártelo con más desarrolladores. ¡Gracias por leer!

Supongo que te gusta

Origin blog.csdn.net/weixin_42373241/article/details/132692171
Recomendado
Clasificación