GitHub : https://github.com/asd821300801/Redis-Java-Client-Jedis


继续之前的文章:Redis Java Client Jedis

  • 我们这一章来学一下Jedis的连接池技术

Jedis连接池技术

  • 引入连接池所需jar包
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.4.2</version>
</dependency>

创建测试类

  • JedisConnectionPoolTest.java
import org.junit.BeforeClass;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** Jedis连接池的使用* @author LingDu*/
public class JedisConnectionPoolTest {//定义连接池对象private static JedisPool jedisPool = null;// Redis服务器IPprivate static String ADDR = "192.168.20.33";// Redis的端口号private static int PORT = 6379;// 访问密码private static String AUTH = "123456";/*** 初始化Redis连接池*/@BeforeClasspublic static void init(){try {//创建连接池配置实例JedisPoolConfig config = new JedisPoolConfig();// 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认trueconfig.setBlockWhenExhausted(true);// 设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");// 是否启用pool的jmx管理功能, 默认trueconfig.setJmxEnabled(true);// 最大空闲连接数, 默认8个 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。config.setMaxIdle(8);// 最大连接数, 默认8个config.setMaxTotal(200);// 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;config.setMaxWaitMillis(1000 * 100);// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;config.setTestOnBorrow(true);//实例化连接池对象jedisPool = new JedisPool(config, ADDR, PORT, 3000, AUTH);} catch (Exception e) {e.printStackTrace();}}@Testpublic void testGetJedisObject() {// 从池中获取一个Jedis对象  Jedis jedis = jedisPool.getResource();  jedis.set("username", "admin");System.out.println(jedis.get("username"));// 释放jedis资源 jedis.close();}
}


代码优化

使用redis配置文件的方式读取连接配置

  • 在resources目录下创建redis.properties,配置信息如下:
#最大连接数, 默认10个
redis.pool.maxTotal=10#最小空闲连接数,默认2个
redis.pool.minIdle=2#最大空闲连接数,默认10个
redis.pool.maxIdle=10#最大的等待时间
redis.pool.maxWait=1000#如果为true,表示有一个idle object evitor线程对idle object进行扫描,如果validate失败,此object会被从pool中drop掉;
#这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义;
redis.pool.testWhileIdle=true#获得一个jedis实例的时候是否检查连接可用性(ping());如果为true,则得到的jedis实例均是可用的;
redis.pool.testOnBorrow=true#return 一个jedis实例给pool时,是否检查连接可用性(ping());
redis.pool.testOnReturn=true#host
redis.ip=127.0.0.1#port
redis.port=6379#auth
redis.auth=123456

创建测试类

  • JedisConnectionPoolConfigTest.java
import java.io.IOException;
import java.util.Properties;
import org.junit.BeforeClass;
import org.junit.Test;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** Jedis连接池的使用* @author LingDu*/
public class JedisConnectionPoolConfigTest {//定义连接池对象private static JedisPool jedisPool = null;//定义用于读取配置文件的Properties对象private static Properties pro;/*** 读取配置redis.properties文件*/static{pro = new Properties();try {//加载配置文件pro.load(JedisConnectionPoolConfigTest.class.getClassLoader().getResourceAsStream("redis.properties"));} catch (IOException e) {e.printStackTrace();}}/*** 初始化Jedis连接池*/@BeforeClasspublic static void initJedisPoolConfig(){JedisPoolConfig config = new JedisPoolConfig();  config.setMaxTotal(Integer.valueOf(pro.getProperty("redis.pool.maxTotal")));config.setMinIdle(Integer.valueOf(pro.getProperty("redis.pool.minIdle")));  config.setMaxIdle(Integer.valueOf(pro.getProperty("redis.pool.maxIdle")));  config.setMaxWaitMillis(Long.valueOf(pro.getProperty("redis.pool.maxWait")));  config.setTestWhileIdle(Boolean.valueOf(pro.getProperty("redis.pool.testWhileIdle")));  config.setTestOnBorrow(Boolean.valueOf(pro.getProperty("redis.pool.testOnBorrow")));  config.setTestOnReturn(Boolean.valueOf(pro.getProperty("redis.pool.testOnReturn")));  jedisPool = new JedisPool(config, pro.getProperty("redis.ip"), Integer.valueOf(pro.getProperty("redis.port")),3000, pro.getProperty("redis.auth"));}@Testpublic void testGetJedisObject() {// 从池中获取一个Jedis对象  Jedis jedis = jedisPool.getResource();  jedis.set("username", "admin");System.out.println(jedis.get("username"));// 释放jedis资源 jedis.close();}
}


工程结构图

Jedis Connection Pool相关推荐

  1. .Net与Oracle地数据库连接池(Connection Pool)

    .Net与Oracle的数据库连接池(Connection Pool) 概述: 数据库连接池允许应用程序重用已存在于池中的数据库连接,以避免反复的建立新的数据库连接.这种技术能有效提高应用程序的伸缩性 ...

  2. java.lang.IllegalStateException: Connection pool shut down

    最近使用HttpClient 4.5 使用 CloseableHttpClient 发起连接后,使用CloseableHttpResponse 接受返回结果,结果就报错了,上网查了下,有位stacko ...

  3. Cannot get a connection, pool error Timeout waiting for idle object (获取不到数据库连接)...

    今天项目中遇到一个问题,一个定时器一段时间就会报错,一段时间又正常,错误如下: Caused by: org.hibernate.exception.GenericJDBCException: Can ...

  4. Cannot get a connection, pool exhausted, cause: ValidateObject failed

    连接池突然不能使用了,重启应用仍然报连接池耗尽,最后debug发现是有人创建了dual表,导致校验语句select 1 from dual返回值为空,而无法通过连接池的连接校验. Caused by: ...

  5. psycopg2.pool.PoolError: connection pool exhausted

    psycopg2.pool 数据库连接池用完的两种情况: sql报错, 导致数据库的链接putconn失败, 没有将conn添加到数据连接池中 真的有那么连接建立, 假设连接池有100个数据库连接, ...

  6. Connection pool shut down http请求异常关闭

    本人在项目运用中写了一个数据推送的组件,需要多线程频繁调用远程接口进行传输数据,远程请求通过HttpClient 使用 CloseableHttpClient 发起连接后,使用CloseableHtt ...

  7. 多线程下httpClient报错 Connection pool shut down

    报错信息 1.报错信息:Connection pool shut down java.lang.IllegalStateException: Connection pool shut downat o ...

  8. 阿里oss上传,读取报错:Connection pool shut down

    Connection pool shut down报错: 今天springboot配置了阿里oss配置类:就一直报错: com.aliyun.oss.ClientException: Connecti ...

  9. 【日常Exception】第二十四回:nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/util/Pool

    热门系列: 程序人生,精彩抢先看 日常异常,是否也有你似曾相识的那一个 1.问题 近期遇到的一个异常问题如题所示,下面是完整的异常内容,原景重现: PropertyAccessException 1: ...

  10. 数据库连接池 Connection Pool 是什么,做什么

    重新拾起Java来学,就遇到了一本不错的书<Hibernate 深入浅出>电子工业出版社,相较其他的工具类书,本书中用词更加生动活泼,从字句之间就可以看出作者的用心与深厚的文字功底,让人相 ...

最新文章

  1. matlab-等高线图-三维曲线的绘制
  2. Android 的WIFI
  3. 大数据将如何重构汽车产业的商业模式?
  4. 运行 java classnotfound_JAR运行出现ClassNotFoundException异常的解决办法
  5. dom4j工具类_基于DOM4J的XML文件解析类
  6. 改文案、删微博又道歉 广汽蔚来自导自演“比特币购车”乌龙案
  7. js获取服务器响应头信息,请问,js中请求头信息和返回头信息的方法
  8. Linux下修改系统时间的简单方法
  9. 开发者点评GitHub 暗黑模式:太暗了
  10. 深夜不眠,爬起来写博客
  11. ContentObserve的基本使用方法
  12. OBCA认证培训课程-分布式事务 MVCC 事务隔离级别
  13. Qt 之 QQ系统表情(二)
  14. 人工智能自动修复图片,模糊图片秒变高清
  15. 解决No instances available for XXX
  16. 多想和你拉手跳恰恰恰
  17. 如何删除掉设备和驱动器下百度网盘的图标
  18. 关于Hanoi塔的实现
  19. 初学者制作VMOS场效应管小功放
  20. 如何把IP-GUARD发布到公网IP来管理全国分公司的终端

热门文章

  1. 小程序跳转:h5避免中间页直接打开微信小程序
  2. oracle 获取日期的毫秒_Oracle date timestamp 毫秒 - 时间函数总结(转)
  3. python列表del_python删除列表元素的三种方法(remove,pop,del)
  4. 迅捷fw310uh驱动下载_迅捷FW150UH驱动程序官方版
  5. C实现iBeacon蓝牙测距
  6. 三峡大学校赛----十万桃花图(线性基)
  7. 【赛题解读】2021 CCF BDCI 基于飞桨实现花样滑冰选手骨骼点动作识别
  8. 使用Yomail的时候出现的错误解决方案
  9. ARM服务器市场现状研究分析-
  10. 在IE地址栏显示自己的小图标