JedisPool连接池

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: JedisPool连接池

查看 Redis 连接数


172.31.2.111:7002> CONFIG GET maxclients
1) "maxclients"
2) "10000"
172.31.2.1111:7002>

172.31.1.135:7002> CONFIG GET maxclients                                            pom.xml 依赖


<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <scope>compile</scope>
</dependency>


xml配置


<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!--最小的空闲链接数 10-->
        <property name="minIdle" value="10"/>
        <!--最大的空闲链接数 100-->
        <property name="maxIdle" value="100"/>
        <!--最大的连接数 500-->
        <property name="maxTotal" value="500"/>
        <!--获取资源时进行测试 是-->
        <property name="testOnBorrow" value="true"/>
        <!--归还资源时进行测试 否-->
        <property name="testOnReturn" value="false"/>
        <!--当资源耗尽时阻塞-->
        <property name="blockWhenExhausted" value="true"/>
        <!--最大等待时间 1秒-->
        <property name="maxWaitMillis" value="1000"/>
        <!--每10秒测试资源可用性-->
        <property name="timeBetweenEvictionRunsMillis" value="10000"/>
        <!--当资源空闲时进行测试 是-->
        <property name="testWhileIdle" value="true"/>
    </bean>


参数说明


资源设置和使用


序号 参数名 含义 默认值 使用建议
1 maxTotal 资源池中最大连接数 8 设置建议见下节
2 maxIdle 资源池允许最大空闲的连接数 8 设置建议见下节
3 minIdle 资源池确保最少空闲的连接数 0 设置建议见下节
4 blockWhenExhausted 当资源池用尽后,调用者是否要等待。只有当为true时,下面的maxWaitMillis才会生效 true 建议使用默认值
5 maxWaitMillis 当资源池连接用尽后,调用者的最大等待时间(单位为毫秒) -1:表示永不超时 不建议使用默认值
6 testOnBorrow 向资源池借用连接时是否做连接有效性检测(ping),无效连接会被移除 false 业务量很大时候建议设置为false(多一次ping的开销)。
7 testOnReturn 向资源池归还连接时是否做连接有效性检测(ping),无效连接会被移除 false 业务量很大时候建议设置为false(多一次ping的开销)。
8 jmxEnabled 是否开启jmx监控,可用于监控 true 建议开启,但应用本身也要开启


空闲资源监测


序号 参数名 含义 默认值 使用建议
1 testWhileIdle 是否开启空闲资源监测 false true
2 timeBetweenEvictionRunsMillis 空闲资源的检测周期(单位为毫秒) -1:不检测 建议设置,周期自行选择,也可以默认也可以使用下面JedisPoolConfig中的配置
3 minEvictableIdleTimeMillis 资源池中资源最小空闲时间(单位为毫秒),达到此值后空闲资源将被移除 1000 60 30 = 30分钟 可根据自身业务决定,大部分默认值即可,也可以考虑使用下面JeidsPoolConfig中的配置
4 numTestsPerEvictionRun 做空闲资源检测时,每次的采样数 3 可根据自身应用连接数进行微调,如果设置为-1,就是对所有连接做空闲监测



如何配置


maxTotal 最大连接数


考虑的几个因素


  • 业务并发量多大
  • 客户端命令的执行时间
  • Redis 资源开销

这个值不是越大越好,连接过多,容易占用客户端和服务端资源。长时命令的阻塞,通过调节最大连接数,也无济于事。


maxIdle 实际上才是业务需要的最大连接数,maxTotal 是为了给出余量。maxIdel 不要设置过小,否则会建立新的连接, maxIdel 是为了控制空闲资源监测。


常见问题


redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:449)


现象是无法从资源池获取到资源,原因是超时。


redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
Caused by: java.util.NoSuchElementException: Pool exhausted
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:464)


现象同样是无法获得资源,但是hi因为 blockWhenExhausted为 false ,资源用尽之后,调用者不等待。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
druid Java 数据库连接
Jdbc整合连接池
Jdbc整合连接池
|
2月前
|
存储 SQL 监控
5-6|jdbc连接池
5-6|jdbc连接池
|
6月前
|
NoSQL Java 数据库连接
springboot整合Redis中连接池jedis与lettuce的对比和实现
springboot整合Redis中连接池jedis与lettuce的对比和实现
953 0
|
监控 Java 数据库连接
c3p0连接池
c3p0连接池
140 0
|
监控 Java 数据库连接
HikariCP连接池
HikariCP连接池
132 0
|
SQL 监控 druid
Druid连接池
Druid连接池
453 0
|
弹性计算 NoSQL 安全
Jedis那么低性能,还在用?赶紧换上 lettuce 吧!
Jedis那么低性能,还在用?赶紧换上 lettuce 吧!
连接池问题
连接池问题
170 0
|
XML 监控 druid
druid连接池的使用
druid连接池的使用
357 0
druid连接池的使用
|
监控 网络协议 druid
连接池配置你真的会吗?
连接池配置你真的会吗?
380 0