• 实现一个redis连接池


    #*****************jedis连接参数设置*********************
    #redis服务器ip
    redis.ip=169.254.130.122
    #redis服务器端口号
    redis.port=6379
    #redis访问密码
    redis.passWord=test123
    #与服务器建立连接的超时时间
    redis.timeout=3000
    #************************jedis池参数设置*******************
    #jedis的最大活跃连接数
    jedis.pool.maxActive=100
    #jedis最大空闲连接数
    jedis.pool.maxIdle=50
    #jedis池没有连接对象返回时,等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。
    #如果超过等待时间,则直接抛出JedisConnectionException
    jedis.pool.maxWait=1500
    #从池中获取连接的时候,是否进行有效检查
    jedis.pool.testOnBorrow=true
    #归还连接的时候,是否进行有效检查
    jedis.pool.testOnReturn=true

    public class RedisPoolUtil {
    private static JedisPool jedisPool = null;
    private static String redisConfigFile = "redis.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(props.getProperty("jedis.pool.maxActive")));
    config.setMaxIdle(Integer.valueOf(props.getProperty("jedis.pool.maxIdle")));
    config.setMaxWaitMillis(Long.valueOf(props.getProperty("jedis.pool.maxWait")));
    config.setTestOnBorrow(Boolean.valueOf(props.getProperty("jedis.pool.testOnBorrow")));
    config.setTestOnReturn(Boolean.valueOf(props.getProperty("jedis.pool.testOnReturn")));
    // 根据配置实例化jedis池
    jedisPool = new JedisPool(config, props.getProperty("redis.ip"),
    Integer.valueOf(props.getProperty("redis.port")),
    Integer.valueOf(props.getProperty("redis.timeout")),
    props.getProperty("redis.passWord"));
    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();
    }
    }
    }

  • 相关阅读:
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业01--线性表
    C博客作业05--指针
    C语言博客作业04--数组
    C博客作业03--函数
    博客作业——循环结构
    C博客作业05-指针
    C博客作业04--数组
  • 原文地址:https://www.cnblogs.com/a1304908180/p/10172966.html
Copyright © 2020-2023  润新知