es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Entradas de estrategia de actualización y actualización de caché

Estoy construyendo una caché Redis para almacenar datos de productos, por ejemplo, pares clave-valor como:

clave -> testKey
valor [json] ->
{
“testA” : “A”,
“testB” : “B”,
“testC” : “C”
}

El problema con el que estoy luchando es si recibo dos solicitudes para actualizar este valor para la clave.

solicitud1 para cambiar -> “testB” = “Bx”

solicitud2 para cambiar -> “testC” = “Cx”

¿Cómo manejar la inconsistencia?

Según mi comprensión, una solicitud leerá los datos anteriores y actualizará solo el valor de “testB”, y otra solicitud actualizará el valor de “testC” porque se ejecutan en paralelo y cualquier nueva solicitud no espera que la última actualización en la caché se propague.

¿Cómo mantenemos la consistencia de los datos en Redis?

Puedo pensar en bloquear usando una base de datos de transacciones al frente, pero eso reducirá la latencia de los datos en tiempo real.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La mejor forma de manejar esta situación es usar la característica transacción de Redis. Las transacciones permiten ejecutar varias instrucciones como una sola operación atómica, asegurando que todas las instrucciones se ejecuten o ninguna lo haga. De esta manera, se puede garantizar que los datos sean consistentes incluso si dos solicitudes se ejecutan en paralelo.

    Para utilizar transacciones, se puede usar el comando MULTI para iniciar una transacción, seguido de las instrucciones que se quieren ejecutar y, luego, el comando EXEC para ejecutar la transacción. Por ejemplo, para actualizar el valor de testKey con las dos solicitudes mencionadas anteriormente, se pueden usar las siguientes instrucciones:

    MULTI
    SET testKey "{\"testA\":\"A\",\"testB\":\"Bx\",\"testC\":\"C\"}"
    SET testKey "{\"testA\":\"A\",\"testB\":\"Bx\",\"testC\":\"Cx\"}"
    EXEC
    

    De esta manera, las dos solicitudes se ejecutarán como una sola operación atómica, garantizando la consistencia de los datos.

Comments are closed.