我想发布一条消息到Redis流,作为Redis transaction的一部分(multi/exec)。在集群环境中,所有属于Redis transaction的数据都必须在同一个分片中,所以问题是我如何控制消息写在哪个分片中。
对于其他类型的数据,我在键中使用哈希标签,如下所示:hset foo{123} mykey myval
我可以在流名称中使用哈希标签,比如:xadd mystream:{123} * mykey myval
,但是我如何在单个消费者中消费来自多个流的消息,特别是如果哈希标签是例如帐号,那么redis中可以有1 mil帐户=每个帐户的流= 1 mil流?
1条答案
按热度按时间cgfeq70w1#
但我如何在单个消费者中消费来自多个流的消息,
XREAD/XREADGROUP命令支持多个键作为参数,并且您可以在单个消费者中消费多个流。但是,您必须确保所有这些键都位于同一插槽中。
特别是如果hashtag是例如帐号,那么在redis中可以有1 mil帐号= stream for each account = 1 mil streams?
您最好不要使用账号作为标签,而是可以将这些账号分成组,使用组号作为标签,并使用单个消费者消费同一组中的多个流。
例如,使用模运算符进行拆分:
hashtag = account-number % group-number