2017-02-01 11 views
3

RedisTemplateで私のスプリングブートアプリケーションを読んでいます。バッチでRedisからデータを取得するRedisTemplate

String valueJson = (String) redisTemplate.opsForValue().get(setKey(someId)); 

「リストsomeIds」のような「someId」のリストがあり、すべてのIDのデータを取得したいと考えています。もちろん、私はリスト上で反復することができ、個々のキーでredisを打つことができますが、私はそれを望んでいません。代わりに、リスト全体を1つの応答にすることを望みます。

助けてください。

List<Object> results = redisTemplate.executePipelined(
    new RedisCallback<Object>() { 
    public Object doInRedis(RedisConnection connection) throws DataAccessException { 
     StringRedisConnection stringRedisConn = (StringRedisConnection)connection; 
     for(String id:someIds) 
     stringRedisConn.get(id); 

    return null; 
    } 
}); 

またはJava 8でhttps://redis.io/topics/pipelining

List<Object> results = redisTemplate.executePipelined((RedisCallback<Object>) connection -> { 
    StringRedisConnection stringRedisConn = (StringRedisConnection) connection; 

    someIds.forEach(id -> { 
     stringRedisConn.get(id); 
    }); 

    return null; 
}); 

結果の一覧は、あなたが望むものをすべて含んでいます

+0

基になるデータ型に応じて、複数のキー(文字列)やハッシュからのエントリを読み取るための 'MGET'、' HMGET'などのバルクコマンドがあります。それ以外の場合は、Thomasが書いたように、パイプラインを使用して複数のコマンドを発行し、最後に同期します。 – mp911de

答えて

4

あなたはパイプラインを使用する必要があります。

+0

そうでないと価値がありません。現時点では(2.9.0)、クラスタでパイプラインを実行しようとすると、Jedisは次のように投げます: 'UnsupportedOperationException:パイプラインは現在JedisClusterConnection'ではサポートされていません。 – waste

関連する問題