sql >> Database >  >> NoSQL >> Redis

Redis Key-vervalmelding met Jedis

Je kunt het doen met de pub-sub alleen modelStart Redis Server

Wijzig de notificatie-keyspace-events in redis.conf in KEA (dit hangt af van uw vereisten). Details gegeven in redis-documentatie http://redis.io/topics/notifications.

Redis Java Client (Jedis), probeer het volgende:

Notificatie Luisteraar:

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


}

Abonnee:

****Opmerking** jedis.psubscribe (nieuwe KeyExpiredListener(), "__key*__:*"); -- Deze methode ondersteunt kanalen op basis van regexpatronen, terwijl jedis.abonneren (new KeyExpiredListener(), ""[email protected]__:notify"); --Deze methode neemt de volledige/exacte kanaalnaam

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

    }
}

Start nu eerst uw abonnee en voer vervolgens de TestJedis uit. U ziet de volgende uitvoer:

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

Nu een use-case waarbij u geïnteresseerd bent in de waarde ook van de verlopen sleutel.

Opmerking: Redis levert alleen de sleutel bij het verlopen van de sleutel door middel van melding van keyspace-gebeurtenissen, waarde gaat verloren zodra de sleutel verloopt. Om de waarde van uw sleutel te laten verlopen, kunt u het volgende werk doen dat hieronder wordt weergegeven met het lastige concept van de schaduwsleutel:

Wanneer u uw notificatiesleutel aanmaakt, maakt u ook een speciale "schaduw"-sleutel die afloopt (verval de eigenlijke notificatie niet). Bijvoorbeeld:

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

// Ontvang een vervalbericht in het kanaal [email protected] :expired// Splits de sleutel op ":" (of welk scheidingsteken u ook besluit te gebruiken), neem het tweede deel om uw originele sleutel te krijgen

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

Merk op dat de waarde van de schaduwsleutel niet wordt gebruikt, dus u wilt de kleinst mogelijke waarde gebruiken, dit kan een lege tekenreeks "" zijn. Het is wat meer werk om in te stellen, maar het bovenstaande systeem doet precies wat je nodig hebt. De overhead is een paar extra opdrachten om uw sleutel daadwerkelijk op te halen en te verwijderen plus de opslagkosten van een lege sleutel.

Anders moet u uw sleutel zo voorbereiden dat deze de toegevoegde waarde bevat.

Ik hoop dat het je helpt!



  1. redis time-out met predis

  2. Aangepaste functies berekende kolommen mongodb-projectie

  3. MongoDb wordt afgesloten met code 100

  4. MongoDB BSON-codec wordt niet gebruikt tijdens het coderen van het object