Jedis作为redis的最佳客户端,它提供了连接池的特性,“连接池”在通常情况下可以有效的提高应用的通信能力,并且这是一种良好的设计模式。Jedis的连接池设计基于apache commons-pool原生库,仅作了简单的封装;在本文中,我将介绍如何使用jedisPool进行程序设计。
一.连接池基本参数详解
- maxActive: 链接池中最大连接数,默认为8.
- maxIdle: 链接池中最大空闲的连接数,默认为8.
- minIdle: 连接池中最少空闲的连接数,默认为0.
- maxWait: 当连接池资源耗尽时,调用者最大阻塞的时间,超时将跑出异常。单位,毫秒数;默认为-1.表示永不超时.
- minEvictableIdleTimeMillis: 连接空闲的最小时间,达到此值后空闲连接将可能会被移除。负值(-1)表示不移除。
- softMinEvictableIdleTimeMillis: 连接空闲的最小时间,达到此值后空闲链接将会被移除,且保留“minIdle”个空闲连接数。默认为-1.
- numTestsPerEvictionRun: 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
- testOnBorrow: 向调用者输出“链接”资源时,是否检测是有有效,如果无效则从连接池中移除,并尝试获取继续获取。默认为false。建议保持默认值.
- testOnReturn: 向连接池“归还”链接时,是否检测“链接”对象的有效性。默认为false。建议保持默认值.
- testWhileIdle: 向调用者输出“链接”对象时,是否检测它的空闲超时;默认为false。如果“链接”空闲超时,将会被移除。建议保持默认值.
- timeBetweenEvictionRunsMillis: “空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
- 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 } }
相关推荐
在数据库编程中,连接池是一种对象池设计模式的应用,主要用于管理和复用数据库连接,避免频繁创建和销毁连接导致的性能损耗。在Redis中,Jedis提供了一个连接池实现,即JedisPool,它允许开发者预先创建一定数量的...
通过对Jedis源码的深入学习,可以了解到如何通过配置和编程实践来优化Redis操作的性能,如合理设置超时时间、避免阻塞操作、正确使用连接池等。 总之,Jedis的源码分析对于Java开发者来说是一份宝贵的资源,它不仅...
3. **创建连接池:** 创建一个JedisPool实例,它是连接管理的核心。 4. **获取连接:** 从JedisPool中获取一个Jedis实例,进行Redis操作。 5. **执行命令:** 使用Jedis实例执行Redis命令,如`set(key, value)`、`...
- **连接池管理**:使用连接池(如Apache Commons Pool2)管理Jedis实例,避免频繁创建和销毁连接,提高系统性能。 - **关闭资源**:在操作完成后记得关闭Jedis实例,释放资源。 - **错误处理**:正确处理可能...
导入后,可以通过Jedis类的静态方法`JedisPoolConfig`配置连接池参数,然后创建`JedisPool`实例,使用`JedisPool`获取`Jedis`对象进行Redis操作,操作完成后,需要将`Jedis`对象返回给连接池,以便后续使用。...
1. **连接管理**:Jedis提供了连接池功能,通过`JedisPool`和`JedisPoolConfig`类来管理和配置连接池。连接池可以有效地复用连接,减少创建和销毁连接的开销,提高系统性能。 2. **命令执行**:Jedis封装了大量的...
1. 连接管理:Jedis推荐使用连接池来管理Redis连接,以提高性能和资源利用率。可以通过`JedisPool`或`LettuceClientResources`实现。 2. 命令执行:大部分Redis操作都可以通过简单的调用Jedis的方法完成,例如`set`...
- 使用连接池管理连接,提高并发性能。 - 在多线程环境中,每个线程应有自己的Jedis实例,避免并发问题。 - 对于大量数据操作,考虑使用Redis的pipeline或transactions以减少网络延迟。 总之,Jedis 3.0.0提供了...
4. **Pooling** - 为了有效地管理连接资源,Jedis使用了连接池(`JedisPool`和`GenericObjectPoolConfig`)。连接池可以减少创建和销毁连接的开销,提高系统效率。 5. **Exception Handling** - Jedis封装了与Redis...
- 连接池管理:为了提高性能,通常会使用JedisPool来管理连接,避免频繁创建和销毁连接。 - 错误处理:正确处理异常,如超时、网络中断等,确保程序的健壮性。 - 缓存策略:根据应用场景设计合理的缓存策略,如...
开发者可以通过查阅这个文档来学习如何初始化Jedis连接、执行各种Redis命令、管理连接池等操作。 学习和掌握这些知识点,对于Java开发者来说至关重要,特别是那些需要在项目中利用Redis作为数据存储或缓存机制的...
6. **并发处理**: 如果该项目涉及高并发环境,那么Jedis的连接池管理将变得非常重要,因为它可以有效地复用连接,提高系统性能。 7. **分布式系统**: 如果项目是分布式系统的一部分,可能还会涉及Redis的主从复制、...
Jedis是Java编程语言中广泛使用的Redis客户端,而Apache Commons Pool2则是一个对象池实现,用于有效地管理资源,如数据库连接或在本例中,Jedis实例。 **Jedis 3.2.0** 是一个重要的Redis客户端,提供了与Redis...
这包括了连接池的配置,例如使用`JedisPoolConfig`来定制连接池参数,以及如何通过`JedisPool`获取和归还Jedis实例。 2. **基本操作**:项目中包含了常见的Redis操作,如设置和获取键值(`set`和`get`),哈希操作(`...
它支持基本的TCP连接创建和断开,同时也提供连接池功能,如`JedisPool`和`JedisPoolConfig`,这使得在多线程环境中高效地复用连接成为可能。通过设置最大连接数、最大空闲连接数以及超时参数等,可以有效地管理资源...
2. 连接池支持:通过集成 Commons Pool,Jedis 支持连接池管理,提高性能和资源利用率。 3. 支持 SSL 连接:增强了安全性,允许在需要的环境中使用加密的 Redis 连接。 4. 高级特性和优化:例如批量操作、响应式编程...
Jedis支持连接池管理,可以提高并发性能,避免频繁创建和关闭连接。此外,Jedis还支持事务、发布/订阅等功能。 2. **Lettuce**: 另一个流行的Redis Java客户端是Lettuce,它的设计更面向Java 8和反应式编程。...
Jedis是Java的Redis客户端,JedisPool是一个连接池,它可以有效地管理和复用Redis连接,避免频繁创建和关闭连接带来的性能开销。使用JedisPool,你需要配置连接池的基本属性,如最大连接数、空闲连接存活时间等,...
1. **连接池管理**:为了提高性能和资源利用率,封装后的客户端可能集成了连接池功能,如使用HikariCP或Apache Commons Pool来管理Redis连接,实现连接的复用,避免频繁创建和销毁连接。 2. **自动重试机制**:在...
1. **连接管理**:初始化Jedis实例,设置连接池(JedisPool),确保连接的复用和资源的有效利用。 2. **基本操作**:包括设置键值(set)、获取键值(get)、删除键(del)、检查键是否存在(exists)等。 3. **复杂...