Redis Stream 的一點理解
使用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/

浙公網安備 33010602011771號