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.

Notificación de espacio de claves de Redis para suscripción de campo y valor.

Actualmente estoy trabajando en el evento de vencimiento de Redis.

Mi objetivo: obtener el Valor, Campo para hacer algo en el próximo proceso después de que los datos en Redis ya hayan caducado.

Así que encontré la funcionalidad de Notificaciones de Espacio de Claves de Redis que permite al cliente suscribirse a un canal en Redis para recibir eventos que afecten a los datos en reposo como los vencimientos.

También tengo algunos ejemplos de código: https://github.com/toygame/nodejs-redis-keyspace-notifications


suscriptor.subscribe("keyevent@0:expired")
suscriptor.on('message', async(channel, message) => {
// hacer algo
console.log(message);
})

Resultado: Key0

Y esto funciona bien, pero el resultado que obtengo es solo la clave que he establecido en Redis y que ha caducado.

Ya he investigado algo https://medium.com/nerd-for-tech/redis-getting-notified-when-a-key-is-expired-or-changed-ca3e1f1c7f0a, pero solo encontré eventos que tal vez pueda obtener como resultado, pero no para el Valor, Campo que espero.

¿Hay alguna forma de obtener esos valores y campos?

PD. Documento: https://redis.io/topics/notifications

ACTUALIZACIÓN
según esto https://stackoverflow.com/a/42556450/11349357

Las notificaciones de espacio de claves no informan sobre el valor, solo el nombre de la clave y/o comando realizado se incluyen en el mensaje publicado. La razón principal subyacente de esto es que los valores de Redis pueden volverse bastante grandes.

Si realmente necesita este tipo de comportamiento, bueno, esto es bastante fácil en realidad. Debido a que las notificaciones de espacio de claves están utilizando mensajes Pub/Sub, simplemente puede llamar a PUBLISH usted mismo después de cada operación relevante y con la información que le interesa.

Parece que no puedo usar esta funcionalidad de Espacio de Claves de Redis, sino que tengo que publicarla por mi cuenta.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Notificaciones de expiración y espacio de clave en Redis

    Como experto en TI especializado en Redis, actualmente estoy explorando cómo manejar las notificaciones de expiración en Redis. Mi objetivo es obtener el valor y el campo de los datos después de que hayan expirado en Redis para poder procesarlos aún más.

    Para lograr esto, descubrí la función de Notificaciones de Espacio de Clave de Redis, que permite que los clientes se suscriban a canales en Redis para recibir eventos que afectan los datos, como las notificaciones de expiración.

    Encontré un código de ejemplo en Github que demuestra cómo suscribirse al canal y recibir eventos de claves expiradas. Aquí está el código:

    subscriber.subscribe("__keyevent@0__:expired")
    subscriber.on('message', async(channel, message) => {
            // do somethings
            console.log(message);       
        })
    

    El resultado devuelto es el nombre de la clave que ha expirado.

    Sin embargo, durante mi investigación, descubrí que las Notificaciones de Espacio de Clave de Redis no informan sobre el valor, solo el nombre de la clave y / o el comando realizado se incluyen en el mensaje publicado. La razón detrás de esto es que los valores de Redis pueden ser bastante grandes, lo que hace ineficiente enviarlos con cada notificación.

    Si quiero obtener el valor y el campo de los datos expirados, tendré que publicar esta información por mi cuenta. Puedo lograr esto llamando al comando PUBLISH después de cada operación relevante con la información relevante.

    En resumen, mientras que las Notificaciones de Espacio de Clave de Redis pueden ayudar a detectar eventos de expiración de clave, no proporcionan el valor y el campo de los datos expirados. Para obtener esta información, tendré que publicarla por mi cuenta.

Comments are closed.