一、用list实现【这是数据类型所以支持持久化】
消息基于redis存储不会因为受jvm内存上限的限制,支持消息的有序性,基于redis的持久化机制,只支持单一消费者订阅,无法避免消息丢失。
二、用PubSub【这不是数据类型,是一种通讯机制,所以不支持持久化】
支持多消费者订阅,但是不支持消息持久化,无法避免消息丢失。
三、基于stream的消息队列
单消费模式
【】是可选参数
消息可以回溯,也可以被多个消费者读取,读取后不会消失,可以阻塞读取数据,但是可能会漏读因为循环后读取$意思是读取最新消息,如果一次性插入多个数据,可以读取只读取到最后一条消息,其他消息可能会漏读。
消费者组消费模式
它可以保证消费者从最后次一次消费的时候开始消费,避免消息丢失。然后它可以避免消费者对于同一个消息重复消费,会有消息确认机制,发送消息后会是pending状态,它会进入一个pendding队列,防止消息进入队列后没有持久化就挂掉,它会先存起来,对redis恢复后进行ack消息确认如果确认了说明消息被使用了,那就移除这个pendding队列。