package com.util.redis; import com.google.common.collect.Sets; import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisSentinelPool; import redis.clients.util.Pool; import java.util.List; public class RedisUtil { private static Logger logger = LoggerFactory.getLogger(RedisUtil.class); private static volatile PooljedisPool; private static final String SINGLE = "single"; private static final String SENTINEL = "sentinel"; public static void init(ConfigProperties configProperties) { if (jedisPool == null) { synchronized (RedisUtil.class) { if (jedisPool == null) { jedisPool = initPool(configProperties); } } } if (jedisPool == null) { throw new RuntimeException("JedisPool 初始化失败"); } } public static Pool getInstance() { if (jedisPool == null) { throw new RuntimeException("JedisPool 没有初始化 "); } return jedisPool; } public static Jedis getJedis() { return getInstance().getResource(); } private static Pool initPool(ConfigProperties configProperties) { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(configProperties.getMaxTotal()); config.setMaxIdle(configProperties.getMaxIdle()); config.setMaxWaitMillis(configProperties.getMaxWaitMillis()); //在获取连接的时候检查有效性, //config.setTestonBorrow(true); //在空闲时检查有效性, 默认false //config.setTestWhileIdle(true); if (CollectionUtils.isEmpty(configProperties.getHosts())) { logger.error("redis {} init failed, nodes not configured", configProperties.getType()); return null; } if (SINGLE.equals(configProperties.getType())) { return new JedisPool(config, configProperties.getHosts().get(0), configProperties.getPort(), configProperties.getTimeout(), configProperties.getPassword(), configProperties.getDatabase() return null; } @Data public static class ConfigProperties { private String type; private int maxTotal = 8; private int maxIdle = 8; private long maxWaitMillis = -1L; private List hosts; private int port; private String password; private String masterName; private int timeout = 2000; private int database; } private RedisUtil() { }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)