RedisSentinelClient.java
package redis.clients.jedis;
import redis.clients.jedis.builders.SentinelClientBuilder;
import redis.clients.jedis.csc.Cache;
import redis.clients.jedis.executors.CommandExecutor;
import redis.clients.jedis.providers.ConnectionProvider;
import redis.clients.jedis.providers.SentineledConnectionProvider;
// @formatter:off
/**
* A high-level client for interacting with Redis Sentinel-managed Redis deployments.
* <p>
* {@code RedisSentinelClient} provides robust support for automatic master failover, connection
* management, and command execution in environments where Redis Sentinel is used to monitor and
* manage Redis servers.
* </p>
* <p>
* Usage:
* </p>
*
* <pre>
* RedisSentinelClient client = RedisSentinelClient.builder().sentinel("localhost", 26379)
* .masterName("mymaster").build();
* </pre>
* <p>
* <b>Relationship to {@code JedisSentineled}:</b></p>
* <ul>
* <li>{@code RedisSentinelClient} is the recommended replacement for the deprecated
* {@code JedisSentineled} class.</li>
* <li>It offers improved API consistency, better failover handling, and a fluent builder for
* configuration.</li>
* <li>Use {@code RedisSentinelClient} for new codebases and when migrating from
* {@code JedisSentineled}.</li>
* </ul>
*/
// @formatter:on
public class RedisSentinelClient extends UnifiedJedis {
private RedisSentinelClient(CommandExecutor commandExecutor,
ConnectionProvider connectionProvider, CommandObjects commandObjects,
RedisProtocol redisProtocol, Cache cache) {
super(commandExecutor, connectionProvider, commandObjects, redisProtocol, cache);
}
/**
* Fluent builder for {@link RedisSentinelClient} (Redis Sentinel).
* <p>
* Obtain an instance via {@link #builder()}.
* </p>
*/
public static class Builder extends SentinelClientBuilder<RedisSentinelClient> {
@Override
protected RedisSentinelClient createClient() {
return new RedisSentinelClient(commandExecutor, connectionProvider, commandObjects,
clientConfig.getRedisProtocol(), cache);
}
}
/**
* Create a new builder for configuring RedisSentinelClient instances.
* @return a new {@link RedisSentinelClient.Builder} instance
*/
public static Builder builder() {
return new Builder();
}
public HostAndPort getCurrentMaster() {
return ((SentineledConnectionProvider) provider).getCurrentMaster();
}
@Override
public Pipeline pipelined() {
return (Pipeline) super.pipelined();
}
}