package com.nq.utils.redis; import java.util.Properties; import com.nq.utils.PropertiesUtil; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * Redis连接池工具类 */ public class RedisPoolUtil { private static JedisPool jedisPool = null; private static String redisConfigFile = "application.properties"; //把redis连接对象放到本地线程中 private static ThreadLocal local=new ThreadLocal(); //不允许通过new创建该类的实例 private RedisPoolUtil() { } /** * 初始化Redis连接池 */ public static void initialPool() { try { Properties props = new Properties(); //加载连接池配置文件 props.load(RedisPoolUtil.class.getClassLoader().getResourceAsStream(redisConfigFile)); // 创建jedis池配置实例 JedisPoolConfig config = new JedisPoolConfig(); // 设置池配置项值 config.setMaxTotal(Integer.valueOf(PropertiesUtil.getProperty("redis.max.total", "20"))); config.setMaxIdle(Integer.valueOf(PropertiesUtil.getProperty("redis.max.idle", "10"))); config.setMaxWaitMillis(Long.valueOf(PropertiesUtil.getProperty("redis.max.wait.millis", "10000"))); config.setTestOnBorrow(Boolean.valueOf(PropertiesUtil.getProperty("redis.test.borrow", "true"))); config.setTestOnReturn(Boolean.valueOf(PropertiesUtil.getProperty("redis.test.return", "true"))); // 根据配置实例化jedis池 jedisPool = new JedisPool(config, PropertiesUtil.getProperty("redis1.ip"), Integer.valueOf(PropertiesUtil.getProperty("redis1.port")), Integer.valueOf(PropertiesUtil.getProperty("redis1.timeout", "1000")), PropertiesUtil.getProperty("redis1.pwd")); System.out.println("线程池被成功初始化"); } catch (Exception e) { e.printStackTrace(); } } /** * 获得连接 * @return Jedis */ public static Jedis getConn() { //Redis对象 Jedis jedis =local.get(); if(jedis==null){ if (jedisPool == null) { initialPool(); } jedis = jedisPool.getResource(); local.set(jedis); } return jedis; } //新版本用close归还连接 public static void closeConn(){ //从本地线程中获取 Jedis jedis =local.get(); if(jedis!=null){ jedis.close(); } local.set(null); } //关闭池 public static void closePool(){ if(jedisPool!=null){ jedisPool.close(); } } }