开发者社区> 问答> 正文

feature: 连接的最大存活时间

一条连接被打开后,频繁使用,按照druid的设计,只要每次空闲时间很短暂,未达到evict的时间长度。将不会清除。那么存在一条连接被永久使用的情况(在繁忙的时候)。

能否增加一个设置或者功能点:单条连接在服务多少请求或者存活多长时间后,被evict。

这样做的好处: 对于通过proxy 到后端db的情况,可以避免负载不均衡。

HikariCP 已经实现这个功能:maxLifeTime.

原提问者GitHub用户ChinaXing

展开
收起
山海行 2023-07-05 21:48:27 68 0
4 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    接的最大存活时间是指连接池中一个连接能够保持打开状态的最长时间。超过这个时间后,连接会被自动关闭并从连接池中移除,以便释放资源和避免连接泄漏。

    连接池是一种常用的技术,用于管理应用程序与数据库之间的连接,以提高数据库访问的性能和可靠性。连接池通常会维护一组可重用的数据库连接,这些连接可以被应用程序重复使用,而不需要每次都重新建立连接和断开连接。

    连接的最大存活时间是连接池中一个重要的参数,可以通过设置连接池的配置来控制。在连接池中,每个连接都有一个最大存活时间,一旦超过这个时间,连接就会被自动关闭并从连接池中移除。这个时间通常由连接池的配置参数来控制,例如c3p0连接池中的maxConnectionAge参数,HikariCP连接池中的maxLifetime参数等。

    2023-07-30 09:39:12
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    非常感谢你的建议和反馈,关于增加连接的最大存活时间以及自动evict的功能点的需求。

    根据你的描述,你希望有一个设置或功能来限制连接的存活时间,以防止连接被永久使用,并且希望在达到一定请求数或存活时间后自动evict连接。你提到了HikariCP已经实现了这个功能,即通过"maxLifeTime"属性设置连接的最大存活时间。

    对于Druid连接池,目前并没有一个类似的内置属性或功能来实现类似的需求。Druid连接池主要关注连接的创建、回收和空闲时间的管理,而不是针对单条连接的存活时间进行自动evict。

    然而,你可以考虑以下两种方式来实现类似的功能:

    1. 自定义Druid连接池:你可以通过扩展Druid连接池的功能,自己实现连接的存活时间管理逻辑。具体来说,你可以通过定时任务或连接使用计数器来监控连接的存活时间,并在达到一定请求数或存活时间后手动回收连接。这样,你就可以控制连接的生命周期。

    2. 结合Druid连接池和代理层:你可以使用Druid连接池作为后端数据库连接池,在前端再加上一个代理层(例如Nginx或HAProxy)。通过代理层,你可以根据连接的请求数或存活时间来进行负载均衡,并在一定条件下对连接进行重新路由,以达到你希望实现的自动evict的效果。

    需要注意的是,无论你选择哪种方式,都需要仔细评估你的应用程序的需求和对连接生命周期管理的具体要求,并确保在实施之前进行充分的测试和验证。

    希望以上信息对你有所帮助,如果你需要更多关于Druid连接池或其他相关方面的信息,请随时提问。

    2023-07-11 16:58:58
    赞同 展开评论 打赏
  • druid也有这样的功能: maxEvictableIdleTimeMillis

    原回答者GitHub用户wenshao

    2023-07-06 12:29:37
    赞同 展开评论 打赏
  • 对于一些特定的场景,设置连接的最大存活时间可以是一个很有用的功能。

    目前,Druid连接池并没有直接提供设置单条连接存活时间的功能。然而,您可以通过结合使用Druid的timeBetweenEvictionRunsMillisminEvictableIdleTimeMillis属性来实现类似的效果。

    timeBetweenEvictionRunsMillis属性定义了两次连接回收的时间间隔,默认为1分钟。minEvictableIdleTimeMillis属性定义了连接的最小空闲时间,默认为30分钟。当连接空闲时间超过minEvictableIdleTimeMillis时,连接池会执行一次回收操作。

    您可以根据您的需求调整这两个属性的值来控制连接的存活时间。例如,将timeBetweenEvictionRunsMillis设置为1分钟,minEvictableIdleTimeMillis设置为10分钟,这样当连接空闲时间超过10分钟时,连接池会执行回收操作,将连接从池中移除。

    虽然这种方式可能无法精确控制单条连接在服务多少请求或存活多长时间后被evict,但可以在一定程度上控制连接的存活时间,并避免连接被永久使用。

    另外,如果您对连接池的更高级配置需求较多,您也可以考虑使用其他连接池实现,如HikariCP,它提供了更多的配置选项,包括maxLifetime属性,用于设置连接的最大存活时间。

    2023-07-06 11:02:40
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载