sql >> Base de Datos >  >> NoSQL >> Redis

Notificación de caducidad de Redis Key con Jedis

Puedes hacerlo con el pub-sub solo modeloIniciar servidor Redis

Cambie los eventos de espacio de teclas de notificación en redis.conf a KEA (esto depende de sus requisitos). Detalles proporcionados en la documentación de redis http://redis.io/topics/notifications.

Redis Java Client (Jedis), intente lo siguiente:

Oyente de notificaciones:

public class KeyExpiredListener extends JedisPubSub {

@Override
    public void onPSubscribe(String pattern, int subscribedChannels) {
        System.out.println("onPSubscribe "
                + pattern + " " + subscribedChannels);
    }

@Override
    public void onPMessage(String pattern, String channel, String message) {

        System.out
                .println("onPMessage pattern "
                        + pattern + " " + channel + " " + message);
    }

//add other Unimplemented methods


}

Suscriptor:

****Nota** jedis.psubscribe (nuevo KeyExpiredListener(), "__key*__:*"); -- Este método es compatible con el canal basado en patrones de expresiones regulares, mientras que jedis.subscribe (nuevo KeyExpiredListener(), ""[email protected]__:notify"); --Este método toma el nombre de canal completo/exacto

public class Subscriber {

    public static void main(String[] args) {
        JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");

        Jedis jedis = pool.getResource();
        jedis.psubscribe(new KeyExpiredListener(), "__key*__:*");

    }

}

Clase de prueba:

public class TestJedis {

    public static void main(String[] args) {
        JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");

        Jedis jedis = pool.getResource();
        jedis.set("notify", "umq");
        jedis.expire("notify", 10);

    }
}

Ahora primero inicie su suscriptor y luego ejecute TestJedis. Verá el siguiente resultado:

onPSubscribe __key*__:* 1
onPMessage pattern __key*__:* [email protected]__:notify set
onPMessage pattern __key*__:* [email protected]__:set notify
onPMessage pattern __key*__:* [email protected]__:notify expire
onPMessage pattern __key*__:* [email protected]__:expire notify
onPMessage pattern __key*__:* [email protected]__:notify expired
onPMessage pattern __key*__:* [email protected]__:expired notify

Ahora un caso de uso en el que está interesado en el valor de la clave caducada también.

Nota: Redis solo proporciona la clave al vencimiento de la clave a través de la notificación de eventos de espacio de claves, el valor se pierde una vez que la clave caduca. Para que el valor de su clave caduque, puede realizar el siguiente trabajo que se muestra a continuación con el complicado concepto de clave oculta:

Cuando cree su clave de notificación, cree también una clave "sombra" especial que caduque (no haga caducar la notificación real). Por ejemplo:

// set your key value
SET notify umq 
//set your "shadow" key, note the value here is irrelevant
SET shadowkey:notify "" EX 10 

// Obtenga un mensaje de caducidad en el canal [email protected] :caducado// Divida la clave en ":"(o cualquier separador que decida usar), tome la segunda parte para obtener su clave original

// Then get the value and do whatever with it
GET notify
// Then delete the key
DEL notify

Tenga en cuenta que el valor de shadowkey no se usa, por lo que desea usar el valor más pequeño posible, podría ser una cadena vacía "". Es un poco más de trabajo configurarlo, pero el sistema anterior hace exactamente lo que necesita. La sobrecarga son algunos comandos adicionales para recuperar y eliminar su clave más el costo de almacenamiento de una clave vacía.

De lo contrario, debe preparar su clave de tal manera que incluya el valor adjunto.

¡Espero que te ayude!