Съхранение на данни
Pub/Sub е платформа за издател/абонат, а не за съхранение на данни. Публикуваните съобщения се изпаряват, независимо дали е имало абонат.
В Redis Streams потокът е тип данни, структура от данни сама по себе си. Съобщенията или записи се съхраняват в паметта и остават там до командата за изтриване.
Синхронизирана/Асинхронна комуникация (Push/Pull)
Pub/Sub е синхронна комуникация (push протокол). Всички страни трябва да бъдат активни едновременно, за да могат да комуникират. Тук Redis е чист брокер за синхронни съобщения.
Redis Streams позволяват и двете синхронни (XREAD
с BLOCK
и специалният $
Идентификаторът е натискане протокол) и асинхронна комуникация (обикновена XREAD
е встапване протокол). XREAD
с BLOCK
е като Pub/Sub, но с възможност за възобновяване при прекъсване на връзката без загуба на съобщения.
Семантика на доставка
Pub/Sub е най-много веднъж, т.е. „изстреляйте и забравете“.
Redis Streams позволява както най-много веднъж, така и най-малко веднъж (изрично потвърждение, изпратено от получателя)
Режим на блокиране за потребители
Pub/Sub е само в режим на блокиране. След като се абонира за канал, клиентът се поставя в режим на абонати и не може да издава команди (с изключение на [P]SUBSCRIBE
, [P]UNSUBSCRIBE
, PING
и QUIT
), стана само за четене.
Redis Streams позволява на потребителите да четат съобщения в режим на блокиране или не.
Изключване на вентилатор
Pub/Sub е само за разклоняване. Всички активни клиенти получават всички съобщения.
Redis Streams позволява разклоняване (с XREAD
), но също и за предоставяне на различно подмножество от съобщения от един и същи поток на много клиенти. Това позволява мащабиране на обработката на съобщенията чрез насочване на различни съобщения към различни работници по начин, по който не е възможно едно и също съобщение да се доставя на множество потребители. Последният сценарий се постига с групи потребители .
Redis Streams предоставят много повече функции, като времеви печати, двойки поле-стойност, диапазони и т.н. Това не означава, че винаги трябва да използвате потоци. Ако вашият случай на използване може да бъде постигнат с Pub/Sub, тогава е по-добре да използвате Pub/Sub. С потоци трябва да се грижите за използването на паметта.