redis之连接池的使用(java版)

1、需要导入的pom.xml

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>

2、连接池工具类

package com.cn.until;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 *在高版本的jedis jar包,比如本版本2.9.0,JedisPoolConfig没有setMaxActive和setMaxWait属性了
 * 这是因为高版本中官方废弃了此方法,用以下两个属性替换。
 * maxActive  ==>  maxTotal
 * maxWait==>  maxWaitMillis
 */
public class RedisUtil {
    //创建连接池对象
    private static JedisPool pool=null;
    //设定连接超时时间
    private static int POOL_TIMEOUT = 10000;
    //创建连接池
    public static JedisPool getPool(String host,int port,String pwd){
        if(pool==null ){
            JedisPoolConfig config = new JedisPoolConfig();
            //设置jedis的最大实例数
            config.setMaxTotal(10);
            //设置jedis的最大空闲实例数
            config.setMaxIdle(5);
            // 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
            config.setMaxWaitMillis(1000 * 10);
            // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
            config.setTestOnBorrow(true);

            pool=new JedisPool(config,host,port,POOL_TIMEOUT,pwd);
        }
        return pool;
    }


    //关闭连接池
    public static void closePool(){
        if(pool!=null){
            pool.close();
        }
    }

    //归还jedis实例到连接池
    public static void returnJedis2Pool(Jedis jedis){
        if(jedis!=null){
            jedis.close();
        }
    }
}

3、测试

package com.cn.service;

import com.cn.until.RedisUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class RedisService {
    public static void main(String[] args) {
        String host="master";
        int port=6379;
        String pwd="123456";
        long l1=System.currentTimeMillis();
        for(int i=0;i<100000;i++) {
            JedisPool pool = null;
            Jedis jedis=null;
            try {
                pool = RedisUtil.getPool(host, port, pwd);
                jedis = pool.getResource();
                jedis.select(21);
                jedis.set(i + "a", i + "b");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                RedisUtil.returnJedis2Pool(jedis);
            }
        }
        RedisUtil.closePool();
        long l2=System.currentTimeMillis();
        System.out.println("已经完成,用时:"+(l2-l1));
    }
}
发布了143 篇原创文章 · 获赞 12 · 访问量 8675

猜你喜欢

转载自blog.csdn.net/hyj_king/article/details/104594130
今日推荐