公司项目原来的一个心跳功能是用的redis发布订阅,发现处理速度远远跟不上,然后我试了上多线程,直接重复消费还有数量都对不上了(开了10个线程,每个线程10条数据,但是消费了不到100条,我是想就消费10条,重复消费没有意义)。
在redis发布订阅中,多个订阅者可以订阅相同的频道,频道内的数据会分发到各个订阅者,不会出现某一个订阅者消费了之后,另一个订阅者读不到该数据的情况。这就会出现重复消费。
也有可能可以在发布订阅中实现比如kafka那种消费偏移量的记录,消费位移提交等等,不过我也懒得研究了。毕竟我认为redis可以搞一些简单的发布订阅,如果你的某个频道订阅逻辑复杂,尝试拆分为几个频道或者干脆点直接上MQ吧,专业的事情专业的来。
如果你还想图省事,可以试试先进先出的list,比如发布消息都是rpush,出都是lpop。