Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis Key Ablaufbenachrichtigung mit Jedis

Sie können dies mit dem Pub-Sub tun nur ModellRedis-Server starten

Ändern Sie die Notify-Keyspace-Events in redis.conf in KEA (dies hängt von Ihren Anforderungen ab). Einzelheiten finden Sie in der Redis-Dokumentation http://redis.io/topics/notifications.

Redis Java Client (Jedis), versuchen Sie Folgendes:

Benachrichtigungs-Listener:

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


}

Abonnent:

****Hinweis** jedis.pabonnieren (neuer KeyExpiredListener(), "__key*__:*"); -- Diese Methoden unterstützen auf Regex-Mustern basierende Kanäle, während jedis.abonnieren (new KeyExpiredListener(), ""[email protected]__:notify"); --Diese Methode nimmt den vollständigen/genauen Kanalnamen

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

    }

}

Testklasse:

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

    }
}

Starten Sie nun zuerst Ihren Abonnenten und führen Sie dann den TestJedis aus. Sie sehen die folgende Ausgabe:

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

Jetzt ein Anwendungsfall, bei dem Sie am Wert interessiert sind des abgelaufenen Schlüssels.

Hinweis: Redis stellt den Schlüssel nur bei Ablauf des Schlüssels durch Benachrichtigung über Schlüsselraumereignisse bereit, der Wert geht verloren, sobald der Schlüssel abläuft. Um den Wert Ihres Schlüssels ablaufen zu lassen, können Sie mit dem kniffligen Konzept des Schattenschlüssels die folgende Umgehung durchführen, die unten gezeigt wird:

Wenn Sie Ihren Benachrichtigungsschlüssel erstellen, erstellen Sie auch einen speziellen ablaufenden „Schatten“-Schlüssel (der eigentliche Benachrichtigungsschlüssel darf nicht ablaufen). Zum Beispiel:

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

// Erhalten Sie eine Ablaufnachricht im Kanal [email protected] :expired// Teilen Sie den Schlüssel auf ":"(oder welches Trennzeichen Sie auch verwenden möchten), nehmen Sie den zweiten Teil, um Ihren ursprünglichen Schlüssel zu erhalten

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

Beachten Sie, dass der Wert des Shadowkeys nicht verwendet wird, also möchten Sie den kleinstmöglichen Wert verwenden, könnte eine leere Zeichenfolge "" sein. Die Einrichtung ist etwas aufwändiger, aber das obige System macht genau das, was Sie brauchen. Der Overhead besteht aus ein paar zusätzlichen Befehlen, um Ihren Schlüssel tatsächlich abzurufen und zu löschen, plus den Speicherkosten eines leeren Schlüssels.

Andernfalls müssen Sie Ihren Schlüssel so aufbereiten, dass er den angehängten Wert enthält.

Hoffe es hilft dir!