CN112231345A - 一种基于锁的连接池实现并发请求的方法及其系统 - Google Patents

一种基于锁的连接池实现并发请求的方法及其系统 Download PDF

Info

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
Application number
CN202011220910.2A
Other languages
English (en)
Inventor
刘德建
岳万恕
郑彬
陈宏展
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujian TQ Digital Co Ltd
Original Assignee
Fujian TQ Digital Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujian TQ Digital Co Ltd filed Critical Fujian TQ Digital Co Ltd
Priority to CN202011220910.2A priority Critical patent/CN112231345A/zh
Publication of CN112231345A publication Critical patent/CN112231345A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating 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所述的一种基于锁的连接池实现并发请求的系统,其特征在于:所述放回连接模块的实现方式进一步具体为:连接进行放回操作后,遍历连接数组,去找连接数组中的哪一个单元是放回的连接,把该单元对应的锁置为可用状态,让这个连接能够被后续的工作行程复用。
CN202011220910.2A 2020-11-05 2020-11-05 一种基于锁的连接池实现并发请求的方法及其系统 Pending CN112231345A (zh)

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)

* Cited by examiner, † Cited by third party
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 腾讯科技(深圳)有限公司 一种数据库连接池的管理方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
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
CN106383784A (zh) 软件自动化测试方法及系统
JPH05216786A (ja) ネットワーク管理システム及びそのための保存装置
CN107181789A (zh) 一种分布式锁实现方法及装置
Jeltsch et al. Stability and accuracy of time discretizations for initial value problems
CN107463612A (zh) 高并发redis数据库操作方法及系统
CN112231345A (zh) 一种基于锁的连接池实现并发请求的方法及其系统
CN102243653B (zh) 一种数据库连接的管理方法及装置
CN109947595A (zh) 一种OpenStack云主机保护方法
CN102243655A (zh) 一种数据库的连接管理方法及装置
CN111769946B (zh) 一种面向联盟链的大规模节点扩容方法
CN112000670A (zh) 一种多线程程序数据统一管理方法、系统及电子设备
CN102243652B (zh) 一种数据库连接管理方法及装置
CN109408201A (zh) 基于分布式数据库的事务管理方法
CN1301606C (zh) 利用终端管理传输网的方法
CN1152338C (zh) 一种并行处理分布式数据库的方法和装置
CN100483415C (zh) 数据库加锁、操作的方法及装置
GB2299730A (en) Interaction of special services in a telecommunications system
CN105740079A (zh) 一种死锁处理方法与系统
CN1913559A (zh) 一种实现数据业务割接的方法及系统
CN108536758B (zh) 一种数据库模式的数据表重构方法、装置及系统
Kurki-Suonio et al. On the design of reactive systems
CN117806609B (zh) 一种基于知识图谱和微服务的生成式低代码开发系统
CN105847269B (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