Redis
 sql >> база данни >  >> NoSQL >> Redis

Уведомление за изтичане на Redis Key с джедаите

Можете да го направите сpub-sub само модел Стартирайте Redis Server

Променете notify-keyspace-events в redis.conf на KEA (това зависи от вашето изискване). Подробности са дадени в документацията на redis http://redis.io/topics/notifications.

Redis Java Client (Jedis) ,Опитайте следното:

Слушател на известия:

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абонирайте се (нов KeyExpiredListener(), "__key*__:*"); -- Тези методи поддържат канал, базиран на регулярни изрази, докато джедаите.абонирайте се (нов KeyExpiredListener(), ""[email protected]__:notify"); --Този метод приема пълно/точно име на канал

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

    }

}

Тестов клас:

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

    }
}

Сега първо стартирайте своя абонат и след това стартирайте TestJedis. Ще видите следния изход:

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

Сега един случай на употреба, при който се интересувате от стойността на изтеклия ключ също.

Забележка: Redis предоставя ключа само при изтичане на ключа чрез уведомяване за събития в ключовото пространство, стойността се губи, след като ключът изтече. За да получите стойността на изтичането на вашия ключ, можете да направите следната работа, показана по-долу, с сложната концепция за сенчестия ключ:

Когато създавате своя ключ за известяване, създайте и специален изтичащ "сенчест" ключ (не изтичайте действителното уведомление). Например:

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

// Получете съобщение за изтичане на срока в канала [email protected] :expired// Разделете ключа на ":" (или какъвто и да е разделител, който решите да използвате), вземете втората част, за да получите оригиналния си ключ

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

Обърнете внимание, че стойността на shadowkey не се използва, така че искате да използвате най-малката възможна стойност, може да бъде празен низ "". Това е малко повече работа за настройка, но горната система прави точно това, от което се нуждаете. Режийните разходи са няколко допълнителни команди за действително извличане и изтриване на вашия ключ плюс разходите за съхранение на празен ключ.

В противен случай трябва да подготвите своя ключ по такъв начин, че да включва стойността, добавена към него.

Надявам се да ви помогне!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Грешка:Връзката с Redis към 127.0.0.1:6379 не успя - свържете ECONNREFUSED 127.0.0.1:6379

  2. Използване на redis с node.js (експрес)

  3. Spring RedisTemplate:Сериализирайте множество моделни класове в JSON. Трябва ли да използвате множество RedisTemplate?

  4. Logstash Web UI не се стартира

  5. Получавам дублиращи се съобщения в моето клъстерирано приложение node.js/socket.io/redis pub/sub