使用Redis实现了一个系统之间解耦的demo, 采用了 StackExchange.Redis C#类库, 实现代码非常简单, 加深了对于 redis stream的理解.
Redis Stream | Redis Pubsub | |
消费模式(推拉) |
消费者采用拉模式 消费者端采用短时轮询机制拉取消息 |
将消息推送到消费者端 |
吞吐量 | 拉模式下吞吐量会更好 | 推模式下吞吐量差一些 |
延迟 | 拉模式的延迟较大 | 推模式延迟很小 |
多播 | 支持, 而且支持类似 kafka的consumer group 概念 | 支持, 同一个消息会推送到多个客户端, 即fanout |
持久化 | 支持 | 不支持, 所以有可能会丢消息 |
acknowledge机制 | 支持 | 因为是push模式, 所以不需要 |
消息可靠性范式 | at most once | fire and forget |
方案 | 使用场景 |
Redis Stream |
实时性要求不太的高的系统之间解耦情形. 特点是: 轻量级方案 |
Redis Pubsub |
没有什么太适合的场景. |
RabbitMQ |
全功能的MQ 1. 适合于实时性和可靠性要求都高的系统之间解耦, 采用push模式 2. 适合于实时性要求不太高的系统之间解耦, 采用pull 模式. |
Kafka | 适合于数据集成或大数据类项目, 实时性要求不高, 吞吐量要求很高 |
================================
参考
================================
redis 官网上的博客, 讲解一些基本概念和使用场景
https://redis.com/blog/what-to-choose-for-your-synchronous-and-asynchronous-communication-needs-redis-streams-redis-pub-sub-kafka-etc-best-approaches-synchronous-asynchronous-communication/
What are the main differences between Redis Pub/Sub and Redis Stream?
https://stackoverflow.com/questions/59540563/what-are-the-main-differences-between-redis-pub-sub-and-redis-stream
#yyds干货盘点#Redis之Stream
https://blog.51cto.com/u_13649800/4703619
#yyds干货盘点# Redis真的可以做MQ消息队列吗?
https://blog.51cto.com/u_11440114/4584094
基于Redis的Stream类型的完美消息队列解决方案基于Redis的Stream类型的完美消息队列解决方案
https://zhuanlan.zhihu.com/p/60501638
C# stackexchange.redis 类库官网
https://stackexchange.github.io/StackExchange.Redis/