`
QING____
  • 浏览: 2251583 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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 : 强制创建新的链接资源

二.程序实例

public class PoolTestMain {
	public static void main(String[] args) {
		JedisPoolConfig config = new JedisPoolConfig();
		config.setMaxActive(32);
		config.setMaxIdle(6);
		config.setMinIdle(0);
		config.setMaxWait(15000);
		config.setMinEvictableIdleTimeMillis(300000);
		config.setSoftMinEvictableIdleTimeMillis(-1);
		config.setNumTestsPerEvictionRun(3);
		config.setTestOnBorrow(false);
		config.setTestOnReturn(false);
		config.setTestWhileIdle(false);
		config.setTimeBetweenEvictionRunsMillis(60000);//一分钟
		config.setWhenExhaustedAction((byte)1);
		JedisPool pool = new JedisPool(config,"127.0.0.1",6379,15000,"0123456",12);
		Jedis client = pool.getResource();//从pool中获取资源
		try{
			client.select(0);
			client.set("k1", "v1");
			System.out.println(client.get("k1"));
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			pool.returnResource(client);//向连接池“归还”资源,千万不要忘记。
		}

	}

}

 

三.Spring与Jedis连接池

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

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">

	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxActive" value="32"></property>
		<property name="maxIdle" value="6"></property>
		<property name="maxWait" value="15000"></property>
		<property name="minEvictableIdleTimeMillis" value="300000"></property>
		<property name="numTestsPerEvictionRun" value="3"></property>
		<property name="timeBetweenEvictionRunsMillis" value="60000"></property>
		<property name="whenExhaustedAction" value="1"></property>
	</bean>
	<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">
		<!-- config -->
		<constructor-arg ref="jedisPoolConfig"></constructor-arg>
		<!-- host -->
		<constructor-arg value="127.0.0.1"></constructor-arg>
		<!-- port -->
		<constructor-arg value="6379"></constructor-arg>
		<!-- timeout -->
		<constructor-arg value="15000"></constructor-arg>
		<!-- password -->
		<constructor-arg value="0123456"></constructor-arg>
		<!-- database index -->
		<constructor-arg value="12"></constructor-arg>		
	</bean>
</beans>

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

public static void main(String[] args) {
	//resources/beans.xml
	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:beans.xml");
	JedisPool jedisPool = (JedisPool)context.getBean("jedisPool");
	Jedis client = jedisPool.getResource();
	try{
		client.select(0);
		client.set("k1", "v1");
		System.out.println(client.get("k1"));
	}catch(Exception e){
		e.printStackTrace();
	}finally{
		jedisPool.returnResource(client);//must be
	}

}

四.Spring-data集成

    上述代码,事实上存在设计上尚有改进之处,spring-data中对redis的支持,在编程级别更加轻便,<此方面内容将会在稍后专门介绍.>

分享到:
评论

相关推荐

    redis连接池jar jedis+common

    在数据库编程中,连接池是一种对象池设计模式的应用,主要用于管理和复用数据库连接,避免频繁创建和销毁连接导致的性能损耗。在Redis中,Jedis提供了一个连接池实现,即JedisPool,它允许开发者预先创建一定数量的...

    java源码剖析-jedis-sr:JedisforRedisJavaclient源码剖析笔记

    通过对Jedis源码的深入学习,可以了解到如何通过配置和编程实践来优化Redis操作的性能,如合理设置超时时间、避免阻塞操作、正确使用连接池等。 总之,Jedis的源码分析对于Java开发者来说是一份宝贵的资源,它不仅...

    jedis-2.1.0

    3. **创建连接池:** 创建一个JedisPool实例,它是连接管理的核心。 4. **获取连接:** 从JedisPool中获取一个Jedis实例,进行Redis操作。 5. **执行命令:** 使用Jedis实例执行Redis命令,如`set(key, value)`、`...

    jedis-jedis-3.3.0.tar.gz

    - **连接池管理**:使用连接池(如Apache Commons Pool2)管理Jedis实例,避免频繁创建和销毁连接,提高系统性能。 - **关闭资源**:在操作完成后记得关闭Jedis实例,释放资源。 - **错误处理**:正确处理可能...

    Jedis-Common-Pool

    导入后,可以通过Jedis类的静态方法`JedisPoolConfig`配置连接池参数,然后创建`JedisPool`实例,使用`JedisPool`获取`Jedis`对象进行Redis操作,操作完成后,需要将`Jedis`对象返回给连接池,以便后续使用。...

    jedis 2.1源码

    1. **连接管理**:Jedis提供了连接池功能,通过`JedisPool`和`JedisPoolConfig`类来管理和配置连接池。连接池可以有效地复用连接,减少创建和销毁连接的开销,提高系统性能。 2. **命令执行**:Jedis封装了大量的...

    jedis-3.0.0.jar(全)

    1. 连接管理:Jedis推荐使用连接池来管理Redis连接,以提高性能和资源利用率。可以通过`JedisPool`或`LettuceClientResources`实现。 2. 命令执行:大部分Redis操作都可以通过简单的调用Jedis的方法完成,例如`set`...

    jedis-3.0.0.7z

    - 使用连接池管理连接,提高并发性能。 - 在多线程环境中,每个线程应有自己的Jedis实例,避免并发问题。 - 对于大量数据操作,考虑使用Redis的pipeline或transactions以减少网络延迟。 总之,Jedis 3.0.0提供了...

    Jedis源码-供查询redis API源码

    4. **Pooling** - 为了有效地管理连接资源,Jedis使用了连接池(`JedisPool`和`GenericObjectPoolConfig`)。连接池可以减少创建和销毁连接的开销,提高系统效率。 5. **Exception Handling** - Jedis封装了与Redis...

    jedis-jedis-2.10.2.tar.gz

    - 连接池管理:为了提高性能,通常会使用JedisPool来管理连接,避免频繁创建和销毁连接。 - 错误处理:正确处理异常,如超时、网络中断等,确保程序的健壮性。 - 缓存策略:根据应用场景设计合理的缓存策略,如...

    JAVA API CHM Jedis

    开发者可以通过查阅这个文档来学习如何初始化Jedis连接、执行各种Redis命令、管理连接池等操作。 学习和掌握这些知识点,对于Java开发者来说至关重要,特别是那些需要在项目中利用Redis作为数据存储或缓存机制的...

    fac-datapoint-jedis

    6. **并发处理**: 如果该项目涉及高并发环境,那么Jedis的连接池管理将变得非常重要,因为它可以有效地复用连接,提高系统性能。 7. **分布式系统**: 如果项目是分布式系统的一部分,可能还会涉及Redis的主从复制、...

    jedis-3.2.0.jar + commons-pool2-2.6.2.jar

    Jedis是Java编程语言中广泛使用的Redis客户端,而Apache Commons Pool2则是一个对象池实现,用于有效地管理资源,如数据库连接或在本例中,Jedis实例。 **Jedis 3.2.0** 是一个重要的Redis客户端,提供了与Redis...

    Jedis-showcase-源码

    这包括了连接池的配置,例如使用`JedisPoolConfig`来定制连接池参数,以及如何通过`JedisPool`获取和归还Jedis实例。 2. **基本操作**:项目中包含了常见的Redis操作,如设置和获取键值(`set`和`get`),哈希操作(`...

    jedis-jedis-2.3.0.zip

    它支持基本的TCP连接创建和断开,同时也提供连接池功能,如`JedisPool`和`JedisPoolConfig`,这使得在多线程环境中高效地复用连接成为可能。通过设置最大连接数、最大空闲连接数以及超时参数等,可以有效地管理资源...

    commons-pool2-2.6.2.jar和jedis-2.9.0.jar.zip

    2. 连接池支持:通过集成 Commons Pool,Jedis 支持连接池管理,提高性能和资源利用率。 3. 支持 SSL 连接:增强了安全性,允许在需要的环境中使用加密的 Redis 连接。 4. 高级特性和优化:例如批量操作、响应式编程...

    redis涉及的jar包和工具

    Jedis支持连接池管理,可以提高并发性能,避免频繁创建和关闭连接。此外,Jedis还支持事务、发布/订阅等功能。 2. **Lettuce**: 另一个流行的Redis Java客户端是Lettuce,它的设计更面向Java 8和反应式编程。...

    redis使用详解

    Jedis是Java的Redis客户端,JedisPool是一个连接池,它可以有效地管理和复用Redis连接,避免频繁创建和关闭连接带来的性能开销。使用JedisPool,你需要配置连接池的基本属性,如最大连接数、空闲连接存活时间等,...

    基于 jedis 进行的友好封装,一个轻量级的 redis client

    1. **连接池管理**:为了提高性能和资源利用率,封装后的客户端可能集成了连接池功能,如使用HikariCP或Apache Commons Pool来管理Redis连接,实现连接的复用,避免频繁创建和销毁连接。 2. **自动重试机制**:在...

    java操作redis工具类

    1. **连接管理**:初始化Jedis实例,设置连接池(JedisPool),确保连接的复用和资源的有效利用。 2. **基本操作**:包括设置键值(set)、获取键值(get)、删除键(del)、检查键是否存在(exists)等。 3. **复杂...

Global site tag (gtag.js) - Google Analytics