package de.idealo.logback.appender.jedisclient; import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisSentinelPool; /** * Factory for Jedis pool creation. Supports the creation of clients for single and sentinel Redis installations. * * @see <a href="http://redis.io/topics/sentinel">redis sentinel</a> * @see <a href="https://github.com/xetorthio/jedis/issues/725">jedis client for redis sentinel</a> */ public class JedisPoolCreator { private final GenericObjectPoolConfig objectPoolConfig; public JedisPoolCreator() { objectPoolConfig = new GenericObjectPoolConfig(); objectPoolConfig.setTestOnBorrow(true); } public JedisPool createJedisPool(RedisConnectionConfig connectionConfig) { return new JedisPool(objectPoolConfig, connectionConfig.getHost(), connectionConfig.getPort(), connectionConfig.getTimeout(), connectionConfig.getPassword(), connectionConfig.getDatabase(), connectionConfig.isSsl()); } public JedisSentinelPool createJedisSentinelPool(RedisConnectionConfig connectionConfig) { return new JedisSentinelPool(connectionConfig.getSentinelMasterName(), getSentinels(connectionConfig.getSentinels()), objectPoolConfig, connectionConfig.getTimeout(), connectionConfig.getPassword(), connectionConfig.getDatabase()); } static Set<String> getSentinels(String sentinelsAsString) { return Arrays.stream(sentinelsAsString.split(",")).map(String::trim).collect(Collectors.toSet()); } }