Можете да го направите с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 не се използва, така че искате да използвате най-малката възможна стойност, може да бъде празен низ "". Това е малко повече работа за настройка, но горната система прави точно това, от което се нуждаете. Режийните разходи са няколко допълнителни команди за действително извличане и изтриване на вашия ключ плюс разходите за съхранение на празен ключ.
В противен случай трябва да подготвите своя ключ по такъв начин, че да включва стойността, добавена към него.
Надявам се да ви помогне!