zoukankan      html  css  js  c++  java
  • Jedis编程设计:连接池

        Jedis作为redis的最佳客户端,它提供了连接池的特性,“连接池”在通常情况下可以有效的提高应用的通信能力,并且这是一种良好的设计模式。Jedis的连接池设计基于apache commons-pool原生库,仅作了简单的封装;在本文中将介绍如何使用jedisPool进行程序设计。

     

    一.连接池基本参数

    1. maxActive:链接池中最大连接数,默认为8
    2. maxIdle:链接池中最大空闲的连接数,默认为8
    3. minIdle:连接池中最少空闲的连接数,默认为0
    4. maxWait:当连接池资源耗尽时,调用者最大阻塞的时间,超时将跑出异常。单位,毫秒数;默认为-1,表示永不超时
    5. minEvictableIdleTimeMillis:连接空闲的最小时间,达到此值后空闲连接将可能会被移除。负值(-1)表示不移除
    6. softMinEvictableIdleTimeMillis:连接空闲的最小时间,达到此值后空闲链接将会被移除,且保留“minIdle”个空闲连接数。默认为-1
    7. numTestsPerEvictionRun:对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3
    8. testOnBorrow:向调用者输出“链接”资源时,是否检测是有有效,如果无效则从连接池中移除,并尝试获取继续获取。默认为false。建议保持默认值
    9. testOnReturn:向连接池“归还”链接时,是否检测“链接”对象的有效性。默认为false。建议保持默认值
    10. testWhileIdle:向调用者输出“链接”对象时,是否检测它的空闲超时;默认为false。如果“链接”空闲超时,将会被移除。建议保持默认值
    11. timeBetweenEvictionRunsMillis:“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1
    12.  whenExhaustedAction:当“连接池”中active数量达到阀值时,即“链接”资源耗尽时,连接池需要采取的手段, 默认为1
       -> 0 :抛出异常,
       -> 1 :阻塞,直到有可用链接资源
       -> 2 :强制创建新的链接资源

    二.程序实例

    1. public class PoolTestMain {  
    2.     public static void main(String[] args) {  
    3.         JedisPoolConfig config = new JedisPoolConfig();  
    4.         config.setMaxActive(32);  
    5.         config.setMaxIdle(6);  
    6.         config.setMinIdle(0);  
    7.         config.setMaxWait(15000);  
    8.         config.setMinEvictableIdleTimeMillis(300000);  
    9.         config.setSoftMinEvictableIdleTimeMillis(-1);  
    10.         config.setNumTestsPerEvictionRun(3);  
    11.         config.setTestOnBorrow(false);  
    12.         config.setTestOnReturn(false);  
    13.         config.setTestWhileIdle(false);  
    14.         config.setTimeBetweenEvictionRunsMillis(60000);//一分钟  
    15.         config.setWhenExhaustedAction((byte)1);  
    16.         JedisPool pool = new JedisPool(config,"127.0.0.1",6379,15000,"0123456",12);  
    17.         Jedis client = pool.getResource();    //从pool中获取资源  
    18.         try{  
    19.             client.select(0);  
    20.             client.set("k1", "v1");  
    21.             System.out.println(client.get("k1"));  
    22.         }catch(Exception e){  
    23.             e.printStackTrace();  
    24.         }finally{  
    25.             pool.returnResource(client);    //向连接池“归还”资源,千万不要忘记。  
    26.         }  
    27.     }  
    28. }  
     

    三.Spring与Jedis连接池

        1) beans.xml:位于/resources/beans.xml

    1. <beans xmlns="http://www.springframework.org/schema/beans"   
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">  
    4.   
    5.     <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  
    6.         <property name="maxActive" value="32"></property>  
    7.         <property name="maxIdle" value="6"></property>  
    8.         <property name="maxWait" value="15000"></property>  
    9.         <property name="minEvictableIdleTimeMillis" value="300000"></property>  
    10.         <property name="numTestsPerEvictionRun" value="3"></property>  
    11.         <property name="timeBetweenEvictionRunsMillis" value="60000"></property>  
    12.         <property name="whenExhaustedAction" value="1"></property>  
    13.     </bean>  
    14.     <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">  
    15.         <!-- config -->  
    16.         <constructor-arg ref="jedisPoolConfig"></constructor-arg>  
    17.         <!-- host -->  
    18.         <constructor-arg value="127.0.0.1"></constructor-arg>  
    19.         <!-- port -->  
    20.         <constructor-arg value="6379"></constructor-arg>  
    21.         <!-- timeout -->  
    22.         <constructor-arg value="15000"></constructor-arg>  
    23.         <!-- password -->  
    24.         <constructor-arg value="0123456"></constructor-arg>  
    25.         <!-- database index -->  
    26.         <constructor-arg value="12"></constructor-arg>        
    27.     </bean>  
    28. </beans>  

        2) 测试类:不过在实际的spring环境中,只需要“注入”即可.

    1. public static void main(String[] args) {  
    2.     //resources/beans.xml
    3.     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:beans.xml");  
    4.     JedisPool jedisPool = (JedisPool)context.getBean("jedisPool");  
    5.     Jedis client = jedisPool.getResource();  
    6.     try{  
    7.         client.select(0);  
    8.         client.set("k1", "v1");  
    9.         System.out.println(client.get("k1"));  
    10.     }catch(Exception e){  
    11.         e.printStackTrace();  
    12.     }finally{  
    13.         jedisPool.returnResource(client);//must be  
    14.     }  
    15. }  




  • 相关阅读:
    当前读与快照读
    Oracle临时表(Temporary Table)
    DG一主两备搭建
    配置dg broker
    源码编译安装PostgreSQL(pg12)
    Troubleshooting ORA-00600 [ORA_NPI_ERROR] ORA-00600: internal error code [kffilCreate01]
    mysql多实例配置(多配置文件)
    mysql多实例配置(单配置文件)
    Fixed Views Definitions in Oracle Database 11.2
    charles 禁用Cookies /Block Cookies Settings
  • 原文地址:https://www.cnblogs.com/jeffen/p/6101021.html
Copyright © 2011-2022 走看看