Как сохранить хэш-ключ Redis с помощью Trident

Я работаю над проектом данных в реальном времени и в настоящее время использую библиотеку trident-redis по адресу https://github.com/kstyrc/trident-redis для хранения наборов ключей со счетчиками. У меня есть несколько более сложных разбивок, которые я хотел бы сохранить, включая значения широты и долготы для каждого ключа. С Redis в командной строке я могу использовать:

HSET 123 lat "40"
HSET 123 lon "-37"

получить

1) "lat"
2) "40"
3) "lon"
4) "-37"

с

HGETALL 123

Как я могу добиться того же эффекта с помощью Trident-Redis? Моя топология в настоящее время выглядит так:

public class TridentEventTopology {

    public static final StormTopology buildTopology(LocalDRPC drpc, StateFactory state) throws IOException {

        final int batchSize = 500;
        final BatchSpout spout = new BatchSpout(batchSize);

        final TridentTopology topology = new TridentTopology();
        TridentState batchedCounts = topology.newStream("spout", spout)
                                               .groupBy(new Fields("id"))
                                               .persistentAggregate(state, new Count(), new Fields("count"));

        topology.newDRPCStream("stream", drpc)
                .groupBy(new Fields("args"))
                .stateQuery(batchedCounts, new Fields("args"), new MapGet(), new Fields("count"))
                .each(new Fields("count"), new FilterNull())
                .aggregate(new Fields("count"), new Sum(), new Fields("sum"));

        return topology.build();
    }

    public static final void executeTopology() throws IOException {

        final StateFactory redis = RedisState.nonTransactional(new InetSocketAddress("localhost", 6379));
        final Config conf = new Config();
        final LocalDRPC drpc = new LocalDRPC();
        final LocalCluster cluster = new LocalCluster();

        cluster.submitTopology("test", conf, buildTopology(drpc, redis));
    }
}

1 ответ

Решение

Я встречал ту же ситуацию. Я думаю, что вы можете изменить функцию multiput и multiget RedisState, в которой вы можете hget или hput ваши нужные ключи и поля. На самом деле это уже реализовано для фиксированного хэш-ключа. поэтому все, что вам нужно сделать, это извлечь поля из многопользовательских или многопользовательских ключевых параметров.

Другие вопросы по тегам