import io.lettuce.core.RedisFuture;
import io.lettuce.core.dynamic.Commands;
import io.lettuce.core.dynamic.batch.BatchExecutor;
import io.lettuce.core.dynamic.batch.BatchSize;
import io.lettuce.core.dynamic.batch.CommandBatching;
import java.util.List;
@BatchSize(2)
public interface HashCommands extends Commands, BatchExecutor {
RedisFuture<String> get(String key, CommandBatching commandBatching);
RedisFuture<String> hget(String key, String fields, CommandBatching commandBatching);
RedisFuture<List<String>> hmget(String key, String[] fields);
}
import io.lettuce.core.cluster.ClusterClientOptions;
import io.lettuce.core.cluster.ClusterTopologyRefreshOptions;
import io.lettuce.core.cluster.RedisClusterClient;
import io.lettuce.core.cluster.api.StatefulRedisClusterConnection;
import io.lettuce.core.cluster.api.async.RedisAdvancedClusterAsyncCommands;
import io.lettuce.core.codec.ByteArrayCodec;
import io.lettuce.core.codec.StringCodec;
import io.lettuce.core.dynamic.RedisCommandFactory;
import io.lettuce.core.dynamic.batch.CommandBatching;
import io.lettuce.core.output.KeyValueListOutput;
import io.lettuce.core.output.KeyValueOutput;
import io.lettuce.core.protocol.LettuceCharsets;
import java.time.Duration;
import java.time.temporal.TemporalUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class LettuceRead {
public static void main(String[] args) throws Exception{
try {
RedisURI uri = RedisURI.builder()
.withHost("localhost")
.withPort(7000)
.build();
RedisClusterClient client = RedisClusterClient.create(uri);
ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
.enablePeriodicRefresh(Duration.ofSeconds(60))
.enableAllAdaptiveRefreshTriggers()
.build();
client.setOptions(ClusterClientOptions.builder()
.topologyRefreshOptions(topologyRefreshOptions)
.build());
StatefulRedisClusterConnection<String, String> connection = client.connect();
connection.setReadFrom(ReadFrom.SLAVE);
RedisCommandFactory factory = new RedisCommandFactory(connection);
HashCommands commands = factory.getCommands(HashCommands.class);
List<List<String>> results = new ArrayList<>();
List<RedisFuture<List<String>>> futures = new ArrayList<>();
String[] fields = new String[2];
fields[0] = "test:field1";
fields[1] = "test:field2";
int KEYS_TO_FETCH = 11;
for(int i = 0; i < KEYS_TO_FETCH; i++) {
futures.add(commands.hmget("test:id="+i, fields));
}
commands.flush();
for (RedisFuture<List<String>> future : futures) {
List<String> keyValues = future.get(10000, TimeUnit.MILLISECONDS);
for (String keyValue: keyValues) {
System.out.println(keyValue);
}
results.add(keyValues);
}
connection.close();
client.shutdown();
}
catch (Exception e){
System.out.println(e.getMessage());
}
}
}