diff --git a/src/test/java/redis/clients/jedis/examples/RetryableCommandExecution.java b/src/test/java/redis/clients/jedis/examples/RetryableCommandExecution.java new file mode 100644 index 0000000000..af8a72d00e --- /dev/null +++ b/src/test/java/redis/clients/jedis/examples/RetryableCommandExecution.java @@ -0,0 +1,45 @@ +package redis.clients.jedis.examples; + +import java.time.Duration; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import redis.clients.jedis.Connection; +import redis.clients.jedis.ConnectionPoolConfig; +import redis.clients.jedis.DefaultJedisClientConfig; +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.JedisClientConfig; +import redis.clients.jedis.UnifiedJedis; +import redis.clients.jedis.providers.PooledConnectionProvider; + +/** + * It is possible to retry command executions in case of connection failures in UnifiedJedis class. + * + * The retry-ability comes through RetryableCommandExecutor class. It is also possible to directly provide + * RetryableCommandExecutor as a parameter. + * + * Note: RetryableCommandExecutor should not be considered for + * Open Source Redis Cluster mode because it requires to + * handle more than connection failures. These are done in ClusterCommandExecutor. + */ +public class RetryableCommandExecution { + + public static void main(String[] args) { + + // Connection and pool parameters + HostAndPort hostAndPort = new HostAndPort("127.0.0.1", 6379); + JedisClientConfig clientConfig = DefaultJedisClientConfig.builder().user("myuser").password("mypassword").build(); + GenericObjectPoolConfig poolConfig = new ConnectionPoolConfig(); + + PooledConnectionProvider provider = new PooledConnectionProvider(hostAndPort, clientConfig, poolConfig); + + // Retry parameters + int maxAttempts = 5; + Duration maxTotalRetriesDuration = Duration.ofSeconds(2); + + UnifiedJedis jedis = new UnifiedJedis(provider, maxAttempts, maxTotalRetriesDuration); + + jedis.set("foo", "bar"); + jedis.get("foo"); + + jedis.close(); + } +}