All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.persistence.redis.client.RedisServerConnectionPool Maven / Gradle / Ivy

package org.infinispan.persistence.redis.client;

import org.infinispan.persistence.redis.configuration.ConnectionPoolConfiguration;
import org.infinispan.persistence.redis.configuration.RedisServerConfiguration;
import org.infinispan.persistence.redis.configuration.RedisStoreConfiguration;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.time.Duration;
import java.util.List;

final public class RedisServerConnectionPool implements RedisConnectionPool {
    private final JedisPool connectionPool;
    private static final Log log = LogFactory.getLog(RedisServerConnectionPool.class, Log.class);

    public RedisServerConnectionPool(RedisStoreConfiguration configuration)
            throws RedisClientException {
        List servers = configuration.servers();
        RedisServerConfiguration server;

        if (servers.size() == 0) {
            RedisServerConnectionPool.log.error("No redis servers defined");
            throw new RedisClientException();
        }

        server = servers.get(0);

        if (servers.size() > 1) {
            RedisServerConnectionPool.log.warn(String.format("Multiple redis servers defined. Using the first only (%s:%d)",
                                                             server.host(), server.port()));
        }

        ConnectionPoolConfiguration connectionPoolConfiguration = configuration.connectionPool();

        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(connectionPoolConfiguration.maxTotal());
        poolConfig.setMinIdle(connectionPoolConfiguration.minIdle());
        poolConfig.setMaxIdle(connectionPoolConfiguration.maxIdle());
        poolConfig.setMinEvictableIdleTime(Duration.ofMillis(connectionPoolConfiguration.minEvictableIdleTime()));
        poolConfig.setTimeBetweenEvictionRuns(Duration.ofMillis(connectionPoolConfiguration.timeBetweenEvictionRuns()));
        poolConfig.setTestOnCreate(connectionPoolConfiguration.testOnCreate());
        poolConfig.setTestOnBorrow(connectionPoolConfiguration.testOnBorrow());
        poolConfig.setTestOnReturn(connectionPoolConfiguration.testOnReturn());
        poolConfig.setTestWhileIdle(connectionPoolConfiguration.testOnIdle());

        connectionPool = new JedisPool(
                poolConfig,
                server.host(),
                server.port(),
                configuration.connectionTimeout(),
                configuration.socketTimeout(),
                configuration.password(),
                configuration.database(),
                null,
                configuration.ssl()
        );
    }

    @Override
    public RedisConnection getConnection() {
        return new RedisServerConnection(connectionPool.getResource());
    }

    @Override
    public void shutdown() {
        connectionPool.destroy();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy