Redis 用 Stream 实现消息队列

redis 做消息队列对比

  • redis:轻量级,低延迟,高并发,低可靠性;
  • rabbitmq:重量级,高可靠,异步,不保证实时;

对于 RabbitMQ 和 Redis 的入队和出队操作,各执行 100 万次,每 10 万次记录一次执行时间。测试数据分为 128Bytes、512Bytes、1K 和 10K 四个不同大小的数据。实验表明:入队时,当数据比较小时 Redis 的性能要高于 RabbitMQ,而如果数据大小超过了 10K,Redis 则慢的无法忍受;出队时,无论数据大小,Redis 都表现出非常好的性能,而 RabbitMQ 的出队性能则远低于 Redis。

https://gitbook.cn/books/5c9db9d920a6bf15767eef6b/index.html

生产者

XADD key ID field string [field string ...]

ID 可以用 *, 会自动生成

python 库

https://charlesleifer.com/blog/redis-streams-with-python/

https://github.com/andymccurdy/redis-py/blob/31519e4ccef49fb59254ee5524007c81faa7e850/redis/client.py#L1965-L1974

https://github.com/andymccurdy/redis-py/blob/31519e4ccef49fb59254ee5524007c81faa7e850/redis/client.py#L2182-L2190

import redis
r = redis.Redis()

消费者组

在消费能力不足,也就是消息处理程序效率不高时,使用该模式

可以启动多个 python 进程来消费消息队列

https://zhuanlan.zhihu.com/p/60501638