sql >> Databáze >  >> NoSQL >> Redis

Upozornění na vypršení platnosti klíče Redis s Jedisem

Můžete to udělat pomocí pub-sub pouze model Spusťte Redis Server

Změňte události notify-keyspace-events v redis.conf na KEA (to závisí na vašem požadavku). Podrobnosti jsou uvedeny v dokumentaci redis http://redis.io/topics/notifications.

Redis Java Client (Jedis) ,Vyzkoušejte následující:

Posluchač upozornění:

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


}

Předplatitel:

****Poznámka** jedis.ppřihlásit se (new KeyExpiredListener(), "__key*__:*"); -- Tyto metody podporují kanál založený na vzoru regulárních výrazů, zatímco jedis.přihlásit se k odběru (new KeyExpiredListener(), ""[email protected]__:notify"); --Tato metoda používá úplný/přesný název kanálu

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

    }

}

Testovací třída:

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

    }
}

Nyní nejprve spusťte svého předplatitele a poté spusťte TestJedis. Uvidíte následující výstup:

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

Nyní jeden případ použití, kdy vás zajímá hodnota také vypršelého klíče.

Poznámka: Redis poskytuje klíč pouze při vypršení platnosti klíče prostřednictvím upozornění na události v prostoru klíčů, po vypršení platnosti klíče se hodnota ztratí. Chcete-li, aby hodnota vašeho klíče vypršela, můžete provést následující obejití, jak je uvedeno níže, pomocí složitého konceptu stínového klíče:

Když vytváříte klíč upozornění, vytvořte také speciální „stínový“ klíč s vypršením platnosti (nevyprší platnost skutečného upozornění). Například:

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

// Získejte zprávu o vypršení platnosti v kanálu [email protected] :expired// Rozdělte klíč na ":" (nebo na jakémkoli oddělovači, který se rozhodnete použít), vezměte si druhou část, abyste získali svůj původní klíč

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

Všimněte si, že hodnota shadowkey není použita, takže chcete použít nejmenší možnou hodnotu, může to být prázdný řetězec "". S nastavením je to trochu více práce, ale výše uvedený systém dělá přesně to, co potřebujete. Režii představuje několik dalších příkazů, které skutečně načítají a vymazávají váš klíč, plus náklady na uložení prázdného klíče.

Jinak musíte klíč připravit tak, aby obsahoval hodnotu, která je k němu připojena.

Doufám, že vám to pomůže!



  1. Vyhledávání v mongo db pomocí mongoose regex vs. text

  2. 3 způsoby, jak získat týden z rande v MongoDB

  3. Co je Hadoop Mapper Class v MapReduce?

  4. Redis je nakonfigurován tak, aby ukládal snímky RDB, ale v současné době nemůže zůstat na disku - Ubuntu Server