zj
2024-06-03 287ac389edd047696d956afafdb855a93830bc0c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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<Jedis> local=new ThreadLocal<Jedis>();
 
    //不允许通过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();
        }
    }
}