CN112231345A - 一种基于锁的连接池实现并发请求的方法及其系统 - Google Patents
一种基于锁的连接池实现并发请求的方法及其系统 Download PDFInfo
- Publication number
- CN112231345A CN112231345A CN202011220910.2A CN202011220910A CN112231345A CN 112231345 A CN112231345 A CN 112231345A CN 202011220910 A CN202011220910 A CN 202011220910A CN 112231345 A CN112231345 A CN 112231345A
- Authority
- CN
- China
- Prior art keywords
- connection
- lock
- array
- pool
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于锁的连接池实现并发请求的方法,该方法为:步骤S1、设置一锁的连接池,所述连接池中包含有锁数组和连接数组;步骤S2、外部站点请求访问数据库缓存或者服务时,先初始化连接池,将锁数组中的每一个锁置为可用的状态;步骤S3、外部站点请求访问时,调用GetConnection的接口进行拿连接,即获得一个可用的连接,该连接的连接数组单元对应的锁数组的锁置为锁状态;步骤S4、请求完数据库缓存或者服务后用完了某一连接,则将该连接进行放回操作,即将连接的连接数组单元所对应的锁数组的锁恢复为可用状态,实现了多个请求能并发执行,提升了系统的性能。
Description
技术领域
本发明涉及计算机通讯技术领域,特别是一种基于锁的连接池实现并发请求的方法及其系统。
背景技术
目前连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、管理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。其中连接池的分配、释放策略对于有效复用连接非常重要,目前行业内一般采用Reference Counting(引用记数)的方式进行处理,虽然这个Reference Counting(引用记数)简单直观,实现方便,但是它却存在一个致命的缺陷,就是容易造成内存泄露。就是如果存在循环引用,那么Reference Counting就可能导致内存泄露。
发明内容
为克服上述问题,本发明的目的是提供一种基于锁的连接池实现并发请求的方法,可有效解决内存泄露问题,同时避免反复地建立和销毁连接,提升系统的性能。
本发明采用以下方案实现:一种基于锁的连接池实现并发请求的方法,所述方法包括如下步骤:
步骤S1、设置一锁的连接池,所述连接池中包含有锁数组和连接数组,所述锁数组与连接数组一一对应,连接池中有N个连接,则连接池中的每一个连接都对应创建一个连接数组的单元,其中锁数组设置有可用状态和锁状态,锁数组中的锁为可用状态,则表示对应的连接数组的单元没有被使用,锁数组中的锁为锁状态,则表示对应的连接数组的单元被使用;
步骤S2、外部站点请求访问数据库缓存或者服务时,先初始化连接池,将锁数组中的每一个锁置为可用的状态;
步骤S3、外部站点请求访问时,调用GetConnection的接口进行拿连接,即获得一个可用的连接,该连接的连接数组单元对应的锁数组的锁置为锁状态;
步骤S4、请求完数据库缓存或者服务后用完了某一连接,则将该连接进行放回操作,即将连接的连接数组单元所对应的锁数组的锁恢复为可用状态。
进一步的,所述步骤S3进一步具体为:外部站点请求访问时,调用GetConnection的接口进行拿连接,先遍历锁数组,锁数组与连接数组是一一对应的,有多少个连接就有多少个锁;如果在遍历的过程中发现某一个锁元素是未锁状态,就将这个锁锁住,并把锁对应的连接返回给调用方,让调用方去操纵下游的数据库缓存或者是服务;当前连接数组的单元被锁住以后,下一个来拿连接的线程,就不会请求这个连接数组。
进一步的,所述步骤S4进一步具体为:连接进行放回操作后,遍历连接数组,去找连接数组中的哪一个单元是放回的连接,把该单元对应的锁置为可用状态,让这个连接能够被后续的工作行程复用。
本发明还提供了一种基于锁的连接池实现并发请求的系统,所述系统包括连接池设置模块、初始化模块、拿连接模块、放回连接模块;
所述连接池设置模块,用于设置一锁的连接池,所述连接池中包含有锁数组和连接数组,所述锁数组与连接数组一一对应,连接池中有N个连接,则连接池中的每一个连接都对应创建一个连接数组的单元,其中锁数组设置有可用状态和锁状态,锁数组中的锁为可用状态,则表示对应的连接数组的单元没有被使用,锁数组中的锁为锁状态,则表示对应的连接数组的单元被使用;
所述初始化模块,用于外部站点请求访问数据库缓存或者服务时,先初始化连接池,将锁数组中的每一个锁置为可用的状态;
所述拿连接模块,用于外部站点请求访问时,调用GetConnection的接口进行拿连接,即获得一个可用的连接,该连接的连接数组单元对应的锁数组的锁置为锁状态;
所述放回连接模块,用于请求完数据库缓存或者服务后用完了某一连接,则将该连接进行放回操作,即将连接的连接数组单元所对应的锁数组的锁恢复为可用状态。
进一步的,所述拿连接模块的实现方式进一步具体为:外部站点请求访问时,调用GetConnection的接口进行拿连接,先遍历锁数组,锁数组与连接数组是一一对应的,有多少个连接就有多少个锁;如果在遍历的过程中发现某一个锁元素是未锁状态,就将这个锁锁住,并把锁对应的连接返回给调用方,让调用方去操纵下游的数据库缓存或者是服务;当前连接数组的单元被锁住以后,下一个来拿连接的线程,就不会请求这个连接数组。
进一步的,所述放回连接模块的实现方式进一步具体为:连接进行放回操作后,遍历连接数组,去找连接数组中的哪一个单元是放回的连接,把该单元对应的锁置为可用状态,让这个连接能够被后续的工作行程复用。
本发明的有益效果在于:本发明设置一锁的连接池,所述连接池中包含有锁数组和连接数组,所述锁数组与连接数组一一对应,连接池中有N个连接,则连接池中的每一个连接都对应创建一个连接数组的单元,其中锁数组设置有可用状态和锁状态,通过锁机制的连接池的分配、释放策略,可有效解决内存泄露问题,且流程简单,同时避免反复地建立和销毁连接,提升系统的性能。
附图说明
图1是本发明的方法流程示意图。
图2是本发明的一具体实施例的流程示意图。
图3是本发明的系统原理框图。
具体实施方式
下面结合附图对本发明做进一步说明。
请参阅图1所示,本发明的一种基于锁的连接池实现并发请求的方法,所述方法包括如下步骤:
步骤S1、设置一锁的连接池,所述连接池中包含有锁数组和连接数组,所述锁数组与连接数组一一对应,连接池中有N个连接,则连接池中的每一个连接都对应创建一个连接数组的单元,其中锁数组设置有可用状态和锁状态,锁数组中的锁为可用状态,则表示对应的连接数组的单元没有被使用,锁数组中的锁为锁状态,则表示对应的连接数组的单元被使用;
步骤S2、外部站点请求访问数据库缓存或者服务时,先初始化连接池,将锁数组中的每一个锁置为可用的状态;
步骤S3、外部站点请求访问时,调用GetConnection的接口进行拿连接,即获得一个可用的连接,该连接的连接数组单元对应的锁数组的锁置为锁状态;
步骤S4、请求完数据库缓存或者服务后用完了某一连接,则将该连接进行放回操作,即将连接的连接数组单元所对应的锁数组的锁恢复为可用状态。
下面结合一具体实施例对本发明作进一步说明:
请参阅图2所示,本发明的一种基于锁的连接池实现并发请求的方法,
步骤1:设置连接池
设置一锁的连接池,所述连接池中包含有锁数组和连接数组,所述锁数组与连接数组一一对应,连接池中有N个连接,则连接池中的每一个连接都对应创建一个连接数组的单元,
步骤2:初始化连接池
首先是初始化,假设连接池中有N个连接,连接池数组中的每一个连接都创建(NEW)一个,并且和下游的数据库缓存或服务进行真正的连接,然后同时把锁数组中的每一个锁置为可用的状态。其中方案中介绍的锁直接用0和1去做伪代码的实现(0代表可用状态;1代表锁状态)。
步骤3:拿连接
拿连接GetConnection的接口,如果上游调用GetConnection的接口,会返回一个可用的连接。过程是先遍历是锁数组,锁数组与连接数组是一一对应的,有多少个连接就有多少个锁。如果在遍历的过程中发现某一个锁元素是0(该连接没有被使用,是未锁状态),就将这个锁锁住,并把锁对应的连接返回给调用方,让它去操纵下游的数据库缓存或者是服务。当前被锁住以后,下一个来拿连接的线程,因为这个锁被锁住了就不会返回,对应的这个连接。可以简单的理解为一个找可用连接,锁住并返回连接的一个过程。
步骤4:放回连接
如果调用方用完了这个连接,要把这个连接放回,这个连接所对应的锁就恢复可用状态,以便他给其他的线程去使用这个连接。数据访问层会遍历连接数组,去找连接数组中的哪一个单元是放回的连接,把对应的锁置为可用状态,让这个连接能够被后续的工作行程复用。所以放回连接,它是一个找到连接,并把锁释放的过程。
如图2,连接池基本架构包括“3个核心接口”、“2个核心数据结构”
3个核心接口介绍如下:
第一个接口是初始化,在服务启动的时候,初始化好与下游数据库缓存或者是服务的连接速度。
第二个核心接口是拿连接(GetConnection)。每当你要请求访问下游数据库缓存或者是服务的时候,不是去每次都connect,它建立一个新的连接,而是通过连接池的getconnection来拿一个接口。
第三个接口是释放连接(FreeConnection),每次请求完数据库缓存或者是服务的时候,不是close一个连接,而是把连接放回连接池。这是连接池组件需要提供的,至少必须要有这三个核心接口。
2个核心数据结构介绍如下:
1、锁数组
2、连接数组
解决多个请求并发的使用会出现问题,所以需要锁数组,来做互斥。图2中连接数组的每一个方格即为连接数组的单元。
请参阅图3所示,本发明还提供了一种基于锁的连接池实现并发请求的系统,所述系统包括连接池设置模块、初始化模块、拿连接模块、放回连接模块;
所述连接池设置模块,用于设置一锁的连接池,所述连接池中包含有锁数组和连接数组,所述锁数组与连接数组一一对应,连接池中有N个连接,则连接池中的每一个连接都对应创建一个连接数组的单元,其中锁数组设置有可用状态和锁状态,锁数组中的锁为可用状态,则表示对应的连接数组的单元没有被使用,锁数组中的锁为锁状态,则表示对应的连接数组的单元被使用;
所述初始化模块,用于外部站点请求访问数据库缓存或者服务时,先初始化连接池,将锁数组中的每一个锁置为可用的状态;
所述拿连接模块,用于外部站点请求访问时,调用GetConnection的接口进行拿连接,即获得一个可用的连接,该连接的连接数组单元对应的锁数组的锁置为锁状态;
所述放回连接模块,用于请求完数据库缓存或者服务后用完了某一连接,则将该连接进行放回操作,即将连接的连接数组单元所对应的锁数组的锁恢复为可用状态。
其中,所述拿连接模块的实现方式进一步具体为:外部站点请求访问时,调用GetConnection的接口进行拿连接,先遍历锁数组,锁数组与连接数组是一一对应的,有多少个连接就有多少个锁;如果在遍历的过程中发现某一个锁元素是未锁状态,就将这个锁锁住,并把锁对应的连接返回给调用方,让调用方去操纵下游的数据库缓存或者是服务;当前连接数组的单元被锁住以后,下一个来拿连接的线程,就不会请求这个连接数组。
其中,所述放回连接模块的实现方式进一步具体为:连接进行放回操作后,遍历连接数组,去找连接数组中的哪一个单元是放回的连接,把该单元对应的锁置为可用状态,让这个连接能够被后续的工作行程复用。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (6)
1.一种基于锁的连接池实现并发请求的方法,其特征在于:所述方法包括如下步骤:
步骤S1、设置一锁的连接池,所述连接池中包含有锁数组和连接数组,所述锁数组与连接数组一一对应,连接池中有N个连接,则连接池中的每一个连接都对应创建一个连接数组的单元,其中锁数组设置有可用状态和锁状态,锁数组中的锁为可用状态,则表示对应的连接数组的单元没有被使用,锁数组中的锁为锁状态,则表示对应的连接数组的单元被使用;
步骤S2、外部站点请求访问数据库缓存或者服务时,先初始化连接池,将锁数组中的每一个锁置为可用的状态;
步骤S3、外部站点请求访问时,调用GetConnection的接口进行拿连接,即获得一个可用的连接,该连接的连接数组单元对应的锁数组的锁置为锁状态;
步骤S4、请求完数据库缓存或者服务后用完了某一连接,则将该连接进行放回操作,即将连接的连接数组单元所对应的锁数组的锁恢复为可用状态。
2.根据权利要求1所述的一种基于锁的连接池实现并发请求的方法,其特征在于:所述步骤S3进一步具体为:外部站点请求访问时,调用GetConnection的接口进行拿连接,先遍历锁数组,锁数组与连接数组是一一对应的,有多少个连接就有多少个锁;如果在遍历的过程中发现某一个锁元素是未锁状态,就将这个锁锁住,并把锁对应的连接返回给调用方,让调用方去操纵下游的数据库缓存或者是服务;当前连接数组的单元被锁住以后,下一个来拿连接的线程,就不会请求这个连接数组。
3.根据权利要求1所述的一种基于锁的连接池实现并发请求的方法,其特征在于:所述步骤S4进一步具体为:连接进行放回操作后,遍历连接数组,去找连接数组中的哪一个单元是放回的连接,把该单元对应的锁置为可用状态,让这个连接能够被后续的工作行程复用。
4.一种基于锁的连接池实现并发请求的系统,其特征在于:所述系统包括连接池设置模块、初始化模块、拿连接模块、放回连接模块;
所述连接池设置模块,用于设置一锁的连接池,所述连接池中包含有锁数组和连接数组,所述锁数组与连接数组一一对应,连接池中有N个连接,则连接池中的每一个连接都对应创建一个连接数组的单元,其中锁数组设置有可用状态和锁状态,锁数组中的锁为可用状态,则表示对应的连接数组的单元没有被使用,锁数组中的锁为锁状态,则表示对应的连接数组的单元被使用;
所述初始化模块,用于外部站点请求访问数据库缓存或者服务时,先初始化连接池,将锁数组中的每一个锁置为可用的状态;
所述拿连接模块,用于外部站点请求访问时,调用GetConnection的接口进行拿连接,即获得一个可用的连接,该连接的连接数组单元对应的锁数组的锁置为锁状态;
所述放回连接模块,用于请求完数据库缓存或者服务后用完了某一连接,则将该连接进行放回操作,即将连接的连接数组单元所对应的锁数组的锁恢复为可用状态。
5.根据权利要求4所述的一种基于锁的连接池实现并发请求的系统,其特征在于:所述拿连接模块的实现方式进一步具体为:外部站点请求访问时,调用GetConnection的接口进行拿连接,先遍历锁数组,锁数组与连接数组是一一对应的,有多少个连接就有多少个锁;如果在遍历的过程中发现某一个锁元素是未锁状态,就将这个锁锁住,并把锁对应的连接返回给调用方,让调用方去操纵下游的数据库缓存或者是服务;当前连接数组的单元被锁住以后,下一个来拿连接的线程,就不会请求这个连接数组。
6.根据权利要求4所述的一种基于锁的连接池实现并发请求的系统,其特征在于:所述放回连接模块的实现方式进一步具体为:连接进行放回操作后,遍历连接数组,去找连接数组中的哪一个单元是放回的连接,把该单元对应的锁置为可用状态,让这个连接能够被后续的工作行程复用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011220910.2A CN112231345A (zh) | 2020-11-05 | 2020-11-05 | 一种基于锁的连接池实现并发请求的方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011220910.2A CN112231345A (zh) | 2020-11-05 | 2020-11-05 | 一种基于锁的连接池实现并发请求的方法及其系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112231345A true CN112231345A (zh) | 2021-01-15 |
Family
ID=74121947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011220910.2A Pending CN112231345A (zh) | 2020-11-05 | 2020-11-05 | 一种基于锁的连接池实现并发请求的方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112231345A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040088413A1 (en) * | 2002-11-04 | 2004-05-06 | Bhogi Sankara R. | Dynamically configurable resource pool |
CN103500180A (zh) * | 2013-09-09 | 2014-01-08 | 北京思特奇信息技术股份有限公司 | 一种基于连接池管理的分布式事务处理方法 |
CN104361000A (zh) * | 2014-09-24 | 2015-02-18 | 广东电网有限责任公司佛山供电局 | 基于自建数据库连接池的关系型数据库的访问方法和系统 |
CN106446183A (zh) * | 2016-09-28 | 2017-02-22 | 中国农业银行股份有限公司 | 数据库连接方法及装置 |
CN106484882A (zh) * | 2016-10-14 | 2017-03-08 | 腾讯科技(深圳)有限公司 | 一种数据库连接池的管理方法和装置 |
-
2020
- 2020-11-05 CN CN202011220910.2A patent/CN112231345A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040088413A1 (en) * | 2002-11-04 | 2004-05-06 | Bhogi Sankara R. | Dynamically configurable resource pool |
CN103500180A (zh) * | 2013-09-09 | 2014-01-08 | 北京思特奇信息技术股份有限公司 | 一种基于连接池管理的分布式事务处理方法 |
CN104361000A (zh) * | 2014-09-24 | 2015-02-18 | 广东电网有限责任公司佛山供电局 | 基于自建数据库连接池的关系型数据库的访问方法和系统 |
CN106446183A (zh) * | 2016-09-28 | 2017-02-22 | 中国农业银行股份有限公司 | 数据库连接方法及装置 |
CN106484882A (zh) * | 2016-10-14 | 2017-03-08 | 腾讯科技(深圳)有限公司 | 一种数据库连接池的管理方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Dini et al. | Feature Interactions in Telecommunications Networks IV | |
FI109069B (fi) | Ohjelmistorakenne tietoliikennekytkentäjärjestelmiä varten | |
CN110555700B (zh) | 区块链智能合约执行方法、装置、计算机可读存储介质 | |
JPH05216786A (ja) | ネットワーク管理システム及びそのための保存装置 | |
CN111090661A (zh) | 一种区块链跨链数据访问方法、装置、适配器及系统 | |
CN107181789A (zh) | 一种分布式锁实现方法及装置 | |
Jeltsch et al. | Stability and accuracy of time discretizations for initial value problems | |
CN112231345A (zh) | 一种基于锁的连接池实现并发请求的方法及其系统 | |
CN107463612A (zh) | 高并发redis数据库操作方法及系统 | |
CN102243655A (zh) | 一种数据库的连接管理方法及装置 | |
CN102243653B (zh) | 一种数据库连接的管理方法及装置 | |
CN109947595A (zh) | 一种OpenStack云主机保护方法 | |
CN106293966A (zh) | 一种lfs系统中ap层与sp层的通信方法及lfs系统 | |
CN109889406A (zh) | 用于管理网络连接的方法、装置、设备和存储介质 | |
CN111769946B (zh) | 一种面向联盟链的大规模节点扩容方法 | |
CN112000670A (zh) | 一种多线程程序数据统一管理方法、系统及电子设备 | |
CN102243652B (zh) | 一种数据库连接管理方法及装置 | |
CN109408201A (zh) | 基于分布式数据库的事务管理方法 | |
CN1152338C (zh) | 一种并行处理分布式数据库的方法和装置 | |
CN101552739A (zh) | 一种网络服务流程实例生命周期管理的方法及系统 | |
CN1913559A (zh) | 一种实现数据业务割接的方法及系统 | |
CN100483415C (zh) | 数据库加锁、操作的方法及装置 | |
CN104484452A (zh) | 一种多元异构关系型数据库连接复用及统一管控方法 | |
CN111428226B (zh) | 一种安全调用密码卡接口的方法 | |
CN105740079A (zh) | 一种死锁处理方法与系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |