GenericObjectPool连接池

最近项目中使用Spring data redis + lettuce管理redis连接。
其通过GenericObjectPool管理连接池,具体lettuce怎么用的连接池暂不考虑,仅关注池对象(连接)是如何管理的。

GenericObjectPool连接池idle对象及其清理

使用自动装配的方式,只支持配置这几个变量

  • minIdle 最小空闲对象数量
  • maxIdle 最大空闲对象数量
  • timeBetweenEvictionRuns 清理空闲连接线程的执行间隔时间
  • maxWait 获取池对象等待时间,超了就报错

维护了一个idleObjects队列

  • 每次使用完一个连接后,都会判断队列是否超过maxIdle数量,满足就放入。
  • 每次取,也先从idleObjects获取。 默认取用顺序LIFO (last in, first out)

启动一个清理idle连接的线程

  • 每过 timeBetweenEvictionRuns 时间执行一次。
  • 每次清理最多 numTestsPerEvictionRun 个idle对象
  • 每次从最久的idle对象开始清理

配置结论:
使用spring data redis lettuce 自动装配时无法配置连接池的numTestsPerEvictionRun属性,且其默认值是3。
假设每过 240s,连接会中断导致异常,需要保证没有任何idle对象闲置时间超过240s,可以如下配置:

  • numTestsPerEvictionRun = 3 (默认值,自动装配方式无法修改)
  • timeBetweenEvictionRuns = 60 (240s 内理论上可以触发四次清理线程)
  • minIdle = 3 (只要不为零即可,确保有连接复用)
  • maxIdle = 12 (每次清理3个,最多4次可以清理完毕)
    (有个隐藏的前提条件:清理时每次都清理最久的idle对象)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值