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

Redis Key udløbsmeddelelse med Jedis

Du kan gøre det med pub-sub Kun modelStart Redis Server

Skift notify-keyspace-events i redis.conf til KEA (dette afhænger af dit krav). Detaljer givet i redis dokumentation http://redis.io/topics/notifications.

Redis Java Client (Jedis) ,Prøv følgende:

Notifikationslytter:

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:

****Bemærk** jedis.tilmeld dig (ny KeyExpiredListener(), "__key*__:*"); -- Denne metode understøtter regex-mønsterbaseret kanal, mens jedis.abonner (ny KeyExpiredListener(), ""[email protected]__:notify"); --Denne metode tager det fulde/nøjagtige kanalnavn

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 først din abonnent og kør derefter TestJedis. Du vil se følgende 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

Nu en use-case, hvor du er interesseret i værdien af den udløbne nøgle også.

Bemærk: Redis giver kun nøglen ved udløb af nøgle gennem meddelelse om nøglerumshændelser, værdien går tabt, når nøglen udløber. For at få værdien på din nøgle udløber, kan du udføre følgende arbejde vist nedenfor med det vanskelige koncept med skyggenøgle:

Når du opretter din notifikationsnøgle, skal du også oprette en speciel udløbende "skygge" nøgle (udløb ikke selve notifikationen). For eksempel:

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

// Få en udløbsmeddelelse i kanalen [email protected] :expired// Del tasten på ":"(eller hvilken separator du vælger at bruge), tag den anden del for at få din originale nøgle

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

Bemærk, at værdien af ​​shadowkey ikke bruges, så du vil bruge den mindst mulige værdi, kan være en tom streng "". Det er lidt mere arbejde at konfigurere, men ovenstående system gør præcis, hvad du har brug for. Overheaden er et par ekstra kommandoer til rent faktisk at hente og slette din nøgle plus lageromkostningerne for en tom nøgle.

Ellers skal du forberede din nøgle på en sådan måde, at den indeholder den værdi, der er tilføjet den.

Håber det hjælper dig!



  1. Bestilling af et resultatsæt tilfældigt på mongo

  2. Fejlsikker meddelelsesudsendelse, der skal forbruges af en specifik modtager ved hjælp af redis og python

  3. Få værdier som matrix af elementer efter $lookup

  4. Hvordan håndterer man mongoose-skemamigreringer korrekt?