Jedis Connection Pool
来源:互联网 发布:node schedule 不好使 编辑:程序博客网 时间:2024/05/22 01:54
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服务器IP private static String ADDR = "192.168.20.33"; // Redis的端口号 private static int PORT = 6379; // 访问密码 private static String AUTH = "123456"; /** * 初始化Redis连接池 */ @BeforeClass public static void init(){ try { //创建连接池配置实例 JedisPoolConfig config = new JedisPoolConfig(); // 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true config.setBlockWhenExhausted(true); // 设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数) config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy"); // 是否启用pool的jmx管理功能, 默认true config.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(); } } @Test public 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#hostredis.ip=127.0.0.1#portredis.port=6379#authredis.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连接池 */ @BeforeClass public 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")); } @Test public void testGetJedisObject() { // 从池中获取一个Jedis对象 Jedis jedis = jedisPool.getResource(); jedis.set("username", "admin"); System.out.println(jedis.get("username")); // 释放jedis资源 jedis.close(); }}
工程结构图
阅读全文
0 0
- Jedis Connection Pool
- Connection Pool
- Connection Pool
- jedis pool的问题
- Jedis connection refused
- jedis调用redis之pool
- Connection Pool in RESIN
- Connection Pool (1)
- Connection Pool (2)
- Connection Pool (3)
- Java Connection Pool components
- JDBC Connection Pool
- CP 配置(Connection Pool)
- tomcat connection pool jndi
- Design own connection pool
- JDBC Connection Pool --> Monitoring
- sqlalchemy Connection Pool
- mysql+django: connection pool
- 位操作应用
- 机器学习——支持向量机SVM之核函数
- HTTP协议—— 简单认识TCP/IP协议
- 【盘点】2017杭州云栖大会迁云实战Workshop
- 大屏做成这样,领导不重视你都难!
- Jedis Connection Pool
- 注册脸谱网站时遇到的问题
- 【SpringMVC学习01】宏观上把握SpringMVC框架
- Hadoop datanode 无法启动(All specified directories are failed to load.)
- MySql启动报错Failed to open log (file './mysql-bin.000232', errno 2)
- Coding Problem : 01 string(01字符串)
- WINDOWS局域网文件共享策略及设置方法
- 解决SQLserver版本之间备份还原的兼容问题
- mapreduce流量汇总程序