Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Powiadomienie o wygaśnięciu klucza Redis w Jedis

Możesz to zrobić za pomocą pub-sub tylko model Uruchom serwer Redis

Zmień notification-keyspace-events w redis.conf na KEA (zależy to od twoich wymagań). Szczegóły podane w dokumentacji redis http://redis.io/topics/notifications.

Klient Redis Java (Jedis) ,Spróbuj wykonać następujące czynności:

Odbiornik powiadomień:

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


}

Subskrybent:

****Uwaga** jedis.psubskrybuj (nowy KeyExpiredListener(), "__key*__:*"); -- Ta metoda obsługuje kanał oparty na wzorcach regex, a jedis.subskrybuj (nowa KeyExpiredListener(), ""[email protected]__:notify"); --Ta metoda przyjmuje pełną/dokładną nazwę kanału

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

    }

}

Klasa testowa:

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

    }
}

Teraz najpierw uruchom subskrybenta, a następnie uruchom TestJedis. Zobaczysz następujące dane wyjściowe:

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

Teraz jeden przypadek użycia, w którym interesuje Cię wartość wygasłego klucza również.

Uwaga: Redis udostępnia klucz tylko po wygaśnięciu klucza poprzez powiadomienie o zdarzeniach obszaru kluczy, wartość jest tracona po wygaśnięciu klucza. Aby uzyskać wygaśnięcie wartości klucza, możesz wykonać następującą pracę, pokazaną poniżej, z trudną koncepcją klucza cienia:

Tworząc klucz powiadamiania, utwórz również specjalny wygasający klucz „cień” (nie wygasaj samego powiadomienia). Na przykład:

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

// Otrzymaj wiadomość o wygaśnięciu na kanale [email protected] :expired// Podziel klucz na ":"(lub inny separator, którego zdecydujesz się użyć), weź drugą część, aby uzyskać oryginalny klucz

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

Zauważ, że wartość shadowkey nie jest używana, więc chcesz użyć najmniejszej możliwej wartości, może to być pusty ciąg "". Konfiguracja wymaga trochę więcej pracy, ale powyższy system robi dokładnie to, czego potrzebujesz. Narzutem jest kilka dodatkowych poleceń do odzyskania i usunięcia klucza oraz koszt przechowywania pustego klucza.

W przeciwnym razie musisz przygotować swój klucz w taki sposób, aby zawierał dołączoną do niego wartość.

Mam nadzieję, że ci to pomoże!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Limit czasu StackExchange.Redis

  2. Jak używać sadd z wieloma elementami w Redis za pomocą Pythonowego API?

  3. Redis Hash Paginacja

  4. Hosting ScaleGrid dla Redis™ na własnym koncie AWS

  5. kabel akcji subskrybowany lokalnie, ale nie na heroku