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

Абонирайте се за множество канали с една и съща тема Джедаи

Забелязах същия проблем, а именно, че нишката за абонамент се блокира, след като се абонирате. За да се справя с това, внедрих оптимизиран клиент на pub/sub, използвайки Netty и го включих в джедайската вилка тук. Това не е изчерпателно решение и не съм имал време наистина да го завърша, но работи за основни абонаменти за канали и шаблони. Основните неща са:

Придобийте екземпляр на pubsub, като използвате:

public static OptimizedPubSub getInstance(String host, int port, String auth, long timeout)

Издаване/Анулиране на абонаменти за шаблон с помощта на:

public ChannelFuture psubscribe(String... patterns)
public ChannelFuture punsubscribe(String... patterns)

можете да игнорирате върнатия ChannelFuture, освен ако не искате да сте 100% сигурни, че заявката ви ще премине (асинхронно е).

Издаване/анулиране на абонаменти за канали с помощта на:

public ChannelFuture subscribe(String... channels)
public ChannelFuture unsubscribe(String... channels)

След това имплементирайте екземпляри на SubListener:

public interface SubListener {
    /**
     * Callback when a message is published on a subscribed channel
     * @param channel The channel the message was received on
     * @param message The received message
     */
    public void onChannelMessage(String channel, String message);

    /**
     * Callback when a message is published on a subscribed channel matching a subscribed pattern
     * @param pattern The pattern that the channel matched
     * @param channel The channel the message was received on
     * @param message The received message
     */
    public void onPatternMessage(String pattern, String channel, String message);
}

и регистрирайте/отменете регистрацията на слушателите, като използвате:

public void registerListener(SubListener listener)
public void unregisterListener(SubListener listener)

OptimizedPubSub никога не блокира и събитията се доставят на регистрираните SubLsteners асинхронно.

Форкът вече е малко стар, така че може да не ви е полезен в сегашната си форма, но можете лесно да изтеглите източника в този пакет и да го изградите самостоятелно. Зависимостите са Джедаи и Нети.

Съжалявам, че нямах по-изчерпателно решение.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Запитване на диапазон в Redis - Spring Data Redis

  2. Инкапсулиране на Unicode от redis

  3. Защо 500MB Redis dump.rdb файл отнема около 5,0GB памет?

  4. Свързване директно с Redis с (от страна на клиента) javascript?

  5. задайте ключ за изтичане в определено време, когато използвате Spring кеширане с Redis