Redis
 sql >> Database >  >> NoSQL >> Redis

Notifica di scadenza della chiave Redis con Jedis

Puoi farlo con il pub-sub solo modello Avvia Redis Server

Modificare notification-keyspace-events in redis.conf in KEA (questo dipende dalle tue esigenze). Dettagli forniti nella documentazione redis http://redis.io/topics/notifications.

Redis Java Client (Jedis), Prova quanto segue:

Ascoltatore delle notifiche:

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


}

Abbonato:

****Nota** jedis.psubscribe (nuovo KeyExpiredListener(), "__key*__:*"); -- Questi metodi supportano il canale basato su pattern regex mentre jedis.iscriviti (new KeyExpiredListener(), ""[email protected]__:notify"); --Questo metodo accetta il nome completo/esatto del canale

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*__:*");

    }

}

Classe di prova:

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);

    }
}

Ora avvia prima il tuo Abbonato e poi Esegui TestJedis. Vedrai il seguente output:

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

Ora un caso d'uso in cui sei interessato al valore anche della chiave scaduta.

Nota: Redis fornisce la chiave solo alla scadenza della chiave tramite la notifica di eventi di keyspace, il valore viene perso alla scadenza della chiave. Per far scadere il valore della tua chiave, puoi eseguire le seguenti operazioni illustrate di seguito con il complicato concetto di chiave ombra:

Quando crei la tua chiave di notifica, crea anche una speciale chiave "ombra" in scadenza (non far scadere la notifica effettiva). Ad esempio:

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

// Ricevi un messaggio di scadenza nel canale [email protected] :expired// Dividi la chiave su ":"(o qualsiasi separatore tu decida di usare), prendi la seconda parte per ottenere la tua chiave originale

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

Nota che il valore di shadowkey non viene utilizzato, quindi desideri utilizzare il valore più piccolo possibile, potrebbe essere una stringa vuota "". È un po' più di lavoro da configurare, ma il sistema di cui sopra fa esattamente ciò di cui hai bisogno. Il sovraccarico è costituito da alcuni comandi extra per recuperare ed eliminare effettivamente la chiave più il costo di archiviazione di una chiave vuota.

Altrimenti devi preparare la tua chiave in modo tale che includa il valore aggiunto ad essa.

Spero ti sia stato d'aiuto!