Есть ли способ подписаться на Redis Streams, аналогичный Redis pub / sub?

Я создаю конвейер данных, который читает двоичные журналы MySQL в реальном времени, используя Maxwell Daemon, а Maxwell Daemon отправляет данные в Redis потоки. Я создал клиент, который потребляет данные из потоков Redis и обрабатывает их. В настоящее время я опрашиваю XREAD, используя бесконечный цикл со временем ожидания в несколько миллисекунд, чтобы потреблять данные из потока, но я считаю это неэффективным решением.

Я искал способ каким-то образом подписаться на поток Redis и получать уведомления всякий раз, когда в поток добавляются новые записи, и наткнулся на этот выпуск GitHub, в котором говорится об использовании Redis pub / sub вместе с потоками для достижения этой функциональности.

Есть ли более эффективный способ построения этой системы?


person Utkarsh    schedule 01.08.2020    source источник


Ответы (1)


Да, используйте BLOCK аргумент XREAD, и вы получите такую ​​же эффективность.

Документация: https://redis.io/commands/xread и https://redis.io/topics/streams-intro#listening-for-new-items-with-xread

person Itamar Haber    schedule 01.08.2020
comment
Спасибо, Итамар Хабер! Я посмотрю на XREAD с BLOCK. Просто хотел узнать еще кое-что, можно ли его использовать в продакшене? - person Utkarsh; 03.08.2020
comment
Да, так в производство - person Itamar Haber; 04.08.2020
comment
@ItamarHaber, есть ли способ, которым Redis может отправлять (не извлекать) данные потребителю (подписчику) с помощью потоков? - person AndrewShmig; 17.02.2021
comment
Я не уверен, что понимаю вопрос - Redis отправляет данные клиентам, которые устанавливают соединение и потребляют (подписываются) на данные. - person Itamar Haber; 18.02.2021