2013-07-29 3 views
2

Я изучаю redis, чтобы сделать pub/sub. Я хотел написать сценарий, который использует redis-cli для подписки на канал и сбрасывает все, что публикуется в файл. Тем не менее, я заметил, что вывод нечеткого выходного канала redis-cli> не работает.Как перенаправить вывод redis-подписки

Буду признателен за любую помощь.

С уважением, Kashyap

ответ

0

Это происходит потому, что нет автоматического румянец на стандартный вывод, когда Redis-консоли отображаются сообщения, связанные с подпиской. Поэтому последние сообщения перед остановкой redis-cli не отображаются в выходном файле.

Нет необходимости использовать принудительный флеш, redis-cli.c необходимо запланировать. В исходном коде Redis отредактируйте файл src/redis-cli.c и найдите следующий фрагмент кода. Добавьте отсутствующую строку fflush.

if (config.pubsub_mode) { 
     if (config.output != OUTPUT_RAW) 
      printf("Reading messages... (press Ctrl-C to quit)\n"); 
     while (1) { 
      if (cliReadReply(output_raw) != REDIS_OK) exit(1); 
      // The following line must be added 
      fflush(stdout); 
     } 
    } 

После того, как redis-cli был скомпилирован снова, он должен работать должным образом.

+2

Большое вам спасибо ... Я только что узнал из чата IRC, что я смог добиться такого же эффекта, запустив redis-cli, как этот «stdbuf -oL ./redis-cli ....» – Kashyap

+0

Я сделал не думайте о stdbuf, но он должен работать: redis-cli действительно использует stdout очень классическим способом (без явной настройки буферов ввода-вывода). –

Смежные вопросы