美文网首页
redis连接池JedisPool的使用

redis连接池JedisPool的使用

作者: 米特侠 | 来源:发表于2017-10-26 15:44 被阅读357次

    测试类:

    public class TestRedis {

    /** * @创建时间:2017-10-26 * @创建者:meter * @返回值类型:void * @描述:测试redis连接池

     */

    private static void testRedisPool(){Jedis redis=RedisPoolService.getJedis();Setkeys=redis.keys("*");

    for(String key:keys){

    System.out.println(key+"='"+redis.get(key)+"'");

    }

    System.out.println(redis.dbSize());

    redis.close();

    }

    public static void main(String[] args) {

    //testReids();

    testRedisPool();

    }

    }

    服务类:

    /**

    * @创建日期:2017-10-26

    * @包路径:org.meter.redis.pool.RedisPoolService.java

    * @创建者:meter

    * @描述:

    * @版权:copyright@2017 by meter !

    */

    package org.meter.redis.pool;

    import java.util.Properties;

    import java.util.ResourceBundle;

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    import redis.clients.jedis.Jedis;

    import redis.clients.jedis.JedisPool;

    import redis.clients.jedis.JedisPoolConfig;

    /**

    * @创建日期:2017-10-26

    * @创建者:meter

    * @描述:

    * @版权:copyright@2017

    */

    public class RedisPoolService {

    private  Logger logger = LoggerFactory.getLogger(RedisPoolService.class);

    // Redis服务器IP

    private  String HOST = "127.0.0.1";

    // Redis的端口号

    private  int PORT = 6379;

    // 可用连接实例的最大数目,默认值为8;

    // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。

    private  int MAX_ACTIVE = 1024;

    // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。

    private  int MAX_IDLE = 200;

    // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;

    private  int MAX_WAIT = 10000;

    // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;

    private  boolean TEST_ON_BORROW = false;

    private  String PASSWORD=null;

    private  Boolean isAuth=false;

    private  JedisPool jedisPool = null;

    private static RedisPoolService instance;

    /**

    * 构造函数

    */

    private RedisPoolService(){

    init();

    }

    static{

    instance=new RedisPoolService();

    }

    /**

    * @创建时间:2017-10-26

    * @创建者:meter

    * @返回值类型:void

    * @描述:初始化Redis连接池

    */

    private  void init() {

    try {

    initParams();

    JedisPoolConfig config = new JedisPoolConfig();

    config.setMaxTotal(MAX_ACTIVE);

    config.setMaxIdle(MAX_IDLE);

    config.setMaxWaitMillis(MAX_WAIT);

    config.setTestOnBorrow(TEST_ON_BORROW);

    jedisPool = new JedisPool(config, HOST, PORT);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    /**

    * @创建时间:2017-10-26

    * @创建者:meter

    * @返回值类型:void

    * @描述:读取配置文件

    */

    private  void initParams(){

    try{

    Properties map=new Properties();

    map.load(RedisPoolService.class.getClassLoader().getResourceAsStream("redis.properties"));

    String tmpHOST=map.getProperty("redis.host");

    if(tmpHOST != null && !"".equals(tmpHOST)){

    HOST=tmpHOST.trim();

    }

    String tmpPASSWORD=map.getProperty("redis.password");

    if(tmpPASSWORD != null && !"".equals(tmpPASSWORD)){

    PASSWORD=tmpPASSWORD.trim();

    }

    String tmpPORT=map.getProperty("redis.port").trim();

    if(tmpPORT != null && !"".equals(tmpPORT)){

    PORT=Integer.parseInt(tmpPORT.trim());

    }

    String tmpIsAuth=map.getProperty("redis.isAuth");

    if(tmpIsAuth != null && !"".equals(tmpIsAuth)){

    isAuth=Boolean.parseBoolean(tmpIsAuth.trim());

    }

    String tmpMAX_ACTIVE=map.getProperty("redis.max_active");

    if(tmpMAX_ACTIVE != null && !"".equals(tmpMAX_ACTIVE)){

    MAX_ACTIVE=Integer.parseInt(tmpMAX_ACTIVE.trim());

    }

    String tmpMAX_IDLE=map.getProperty("redis.max_idle");

    if(tmpMAX_IDLE != null && !"".equals(tmpMAX_IDLE)){

    MAX_IDLE=Integer.parseInt(tmpMAX_IDLE.trim());

    }

    String tmpMAX_WAIT=map.getProperty("redis.max_wait");

    if(tmpMAX_WAIT != null && !"".equals(tmpMAX_IDLE)){

    MAX_WAIT=Integer.parseInt(tmpMAX_WAIT.trim());

    }

    String tmpTEST_ON_BORROW=map.getProperty("redis.test_on_borrow");

    if(tmpTEST_ON_BORROW != null && !"".equals(tmpTEST_ON_BORROW)){

    TEST_ON_BORROW=Boolean.parseBoolean(tmpTEST_ON_BORROW.trim());

    }

    }catch(Exception e){

    logger.error("读取redis配置参数失败。",e);

    }

    }

    /**

    * @创建时间:2017-10-26

    * @创建者:meter

    * @返回值类型:Jedis

    * @描述:获取Jedis实例

    * @return

    */

    public static Jedis getJedis() {

    try {

    Jedis resource = instance.jedisPool.getResource();

    if (instance.isAuth) {

    resource.auth(instance.PASSWORD);

    }

    return resource;

    } catch (Exception e) {

    e.printStackTrace();

    return null;

    }

    }

    }

    配置文件:

    #redis连接池参数配置

    #主机IP地址

    redis.host=192.168.4.154

    #服务器端口

    redis.port=6380

    #是否开启密码认证

    redis.isAuth=true

    #如果开启了认证时的密码

    redis.password=admin1234

    #可用连接实例的最大数目,默认值为8。如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。

    redis.max_active=100

    #控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。

    redis.max_idle=10

    #等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException

    redis.max_wait=30000

    #在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的。

    redis.test_on_borrow=false

    相关文章

      网友评论

          本文标题:redis连接池JedisPool的使用

          本文链接:https://www.haomeiwen.com/subject/ztskpxtx.html