前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JedisPool连接池

JedisPool连接池

作者头像
王小明_HIT
发布2019-08-13 09:52:45
9260
发布2019-08-13 09:52:45
举报
文章被收录于专栏:程序员奇点程序员奇点

查看 Redis 连接数

代码语言:javascript
复制
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 依赖

代码语言:javascript
复制
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <scope>compile</scope>
</dependency>

xml配置

代码语言:javascript
复制
    <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 是为了控制空闲资源监测。

常见问题

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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 ,资源用尽之后,调用者不等待。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档