为啥非得要给newusers这个stream创建用户消费组呢?这才是关键 我们创建了消费组之后
可以使用多个消费者对这个消费组的元素进行消费 比如命令:
xreadgroup group sendmail shenyi count 1 streams newusers
xreadgroup group sendmail huxiaobai count 1 streams newusers
两个消费者可以同时对消费组进行读取并且存在竞争关系 shenyi读取了的huxiaobai就读取不到了因为已经被消费了
并且shenyi和huxiaobai消费的元素都会被记录到newuser这个stream的pending队列里面 比如执行命令:xinfo groups newusers 你会发现newusers这个stream的pengding = 4 那么shenyi可能消费了2个 huxiaobai可能就消费了2个 假设哈! 正是因为有这个特性 所以比list模拟消息队列好!因为shenyi消费者消费完组里面的元素执行完正常逻辑之后可以通过ack机制
删除pending里面它所对应的元素 huxiaobai也一样
如果正常的业务逻辑执行失败了就不去删除该消费者在pending队列里面的元素 ! 那么这样我们就可以通过查看pending里面元素
知道哪些用户的邮件没有发送! 如果使用list模拟队列的话 正常业务完事了 不管你成功失败
那么list队列里面的元素也就丢失了!除非搞异常补救措施但也不完美!另外list里面你除非开好几个死循环程序去读取list里面的元素进行处理
但是stream当中生成组之后可以有多个消费者对他进行消费 这都是比list模拟队列好的地方 更加强大的地方!
redis当中的stream类型 为啥非得创建组
最新推荐文章于 2023-03-28 20:06:15 发布