序
本文主要简述redis作为消息队列的利弊和场景。
消息中间件要素
消息模型
传送模型(
发布订阅or点对点
)
是基于topic的发布订阅还是点对点模型接收模型(
推or拉
)
消息是由生产者推还是由消费者拉
消息投递可靠性
at-most-once(
消息丢失
)
消息被投递0或者1次,消息可能被丢失at-least-once(
消息重复
)
消息可能被投递多次,直到收到ack,会造成消息重复。像rabbitmq开启消息持久化及ack机制,可以保证此投递策略,确保消息投递成功,但可能造成消息重复。exactly-once(
消息仅且投递一次
)
消息通过事务等机制保证对方能成功接收,而且不会重复接收
消息持久化
消费者是否可以接收离线时的消息
消息优先级
消息是否支持优先级
消息回溯
消息是否可以重复消费
redis做消息队列
发布订阅 | 推 | at-most-once | 否 | 需要自己支持 | 否 |
点对点模式需要自己通过list的lpush和brpop来模拟实现。
优先级队列可以用zset来实现