2017-02-01 3 views
3

Я использую RedisTemplate в моем ярового приложения загрузки и я могу читать с помощью singleKey.Получить данные с Redis в партии RedisTemplate

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

У меня теперь список «someId», как «Список someIds», и я хочу, чтобы получить данные всех идентификаторов. Конечно, я могу перебирать список и нажимать redis на секретные ключи, но я этого не хочу, вместо этого хочу предоставить весь список, чтобы получить ответ за один раз.

Пожалуйста, помогите.

+0

В зависимости от базового типа данных существуют массовые команды типа «MGET», «HMGET» для чтения нескольких ключей (строк) или записей из хэша. В противном случае, как писал Томас, используйте конвейерную обработку для выдачи нескольких команд и синхронизации в конце. – mp911de

ответ

4

Вы должны использовать конвейерную: https://redis.io/topics/pipelining

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:

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

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

    return null; 
}); 

Список результатов будет содержать все, что вы хотите.

+0

Стоит отметить, что на данный момент (версия 2.9.0), пытаясь выполнить конвейер с кластером, Jedis будет бросать: 'UnsupportedOperationException: Pipeline в настоящее время не поддерживается для JedisClusterConnection'. – waste

Смежные вопросы