sql >> Databasteknik >  >> NoSQL >> Redis

Redis Key upphör med Jedis

Du kan göra det med pub-sub Endast modellStarta Redis Server

Ändra notify-keyspace-events i redis.conf till KEA (detta beror på dina krav). Information ges i redis dokumentation http://redis.io/topics/notifications.

Redis Java Client (Jedis), Prova följande:

Aviseringslyssnare:

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


}

Prenumerant:

****Obs** jedis.prenumerera (new KeyExpiredListener(), "__key*__:*"); -- Den här metoden stöder kanalbaserade regexmönster medan jedis.prenumerera (new KeyExpiredListener(), ""[email protected]__:notify"); --Denna metod tar fullständigt/exakt kanalnamn

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

    }

}

Testklass:

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

    }
}

Starta nu först din prenumerant och kör sedan TestJedis. Du kommer att se följande utdata:

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 ett användningsfall där du är intresserad av värdet för den utgångna nyckeln också.

Obs! Redis tillhandahåller nyckeln endast när nyckeln löper ut genom meddelanden om nyckelutrymmeshändelser, värde går förlorat när nyckeln går ut. För att få värdet på din nyckel upphör att gälla kan du göra följande arbete som visas nedan med det knepiga konceptet shadow key:

När du skapar din aviseringsnyckel, skapa även en speciell "skuggnyckel" som löper ut (förfaller inte själva meddelandet). Till exempel:

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

// Få ett utgångsmeddelande i kanalen [email protected] :expired// Dela tangenten på ":"(eller vilken separator du än väljer att använda), ta den andra delen för att få din originalnyckel

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

Observera att värdet på shadowkey inte används så du vill använda minsta möjliga värde, kan vara en tom sträng "". Det är lite mer jobb att installera men ovanstående system gör precis vad du behöver. Overheaden är några extra kommandon för att faktiskt hämta och radera din nyckel plus lagringskostnaden för en tom nyckel.

Annars måste du förbereda din nyckel på ett sådant sätt att den innehåller värdet som bifogas den.

Hoppas det hjälper dig!



  1. Hitta dokument vars arrayfält innehåller minst n element i en given array

  2. Problem med att returnera data hämtade från DB-förfrågningar anropade i slingan

  3. DeprecationWarning:Lyssna på händelser i Db-klassen har fasats ut och kommer att tas bort i nästa större version

  4. Använd mock MongoDB-server för enhetstest