Golang语言社区--Golang通用连接池
时间:2022-05-04
本文章向大家介绍Golang语言社区--Golang通用连接池,主要内容包括1.连接池、2.go-commons-pool 使用、3 总结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
大家好,我是社区主编彬哥,本篇文章是给大家转载一篇关于连接池的文章。
连接池在编程中并不少见,链接数据库,redis等操作都需要连接池,否则就会出现并发问题,如果每次操作都建立一条新的链接将会大大消耗资源,笔者也是在使用thrift-Clinet链接Service端使用的时候出现了并发问题,然后找到了一个通用的连接池的库在这里分享给大家.
附上:
喵了个咪的博客:w-blog.cn go-commons-pool-Github地址:github.com/jolestar/go-commons-pool
1.连接池
在使用之前我们需要先了解清楚连接池的概念,总结下来连接池主要解决以下几类问题:
- 减少连接创建时间 与数据库还是Thrift等程序建立连接都是有开销的。如果这类连接是“循环”使用的,使用该方式这些花销就可避免。
- 简化的编程模式 当使用连接池时,具体的操作都是统一的不用关心初始化等各项关心点
- 受控的资源使用 如果用户不使用连接池,而是每当需要时创建一个新的连接,那么用户的应用程序的资源使用会产生非常大的浪费并且可能会导致高负载下的异常发生。
2.go-commons-pool 使用
喵咪写了一个demo使用方式如下:
package main
import (
"github.com/jolestar/go-commons-pool"
"fmt"
"time"
)
var pCommonPool *pool.ObjectPool
type PoolTest struct{}
func (this *PoolTest) Test() string {
return "PoolTest"
}
func init() {
// 初始化连接池配置项
PoolConfig := pool.NewDefaultPoolConfig()
// 连接池最大容量设置
PoolConfig.MaxTotal = 1000
WithAbandonedConfig := pool.NewDefaultAbandonedConfig()
// 注册连接池初始化链接方式
pCommonPool = pool.NewObjectPoolWithAbandonedConfig(pool.NewPooledObjectFactorySimple(
func() (interface{}, error) {
return Link()
}), PoolConfig, WithAbandonedConfig)
}
// 初始化链接类
func Link() (*PoolTest, error) {
fmt.Println("初始化PoolTest类!!!")
return &PoolTest{}, nil
}
func main() {
//----------------------------------第一次使用将会调用初始化方法---------------------------------
fmt.Println("第一次使用将会调用初始化方法")
Test()
//----------------------------------第二次使用将会复用初始化好的对象---------------------------------
fmt.Println("第二次使用将会复用初始化好的实例")
Test()
//----------------------------------连续多次并发调用当连接池不够用的会扩充连接池---------------------------
fmt.Println("连续多次并发调用当连接池不够用的会扩充连接池")
go Test()
go Test()
go Test()
go Test()
go Test()
time.Sleep(1 * time.Second)
}
func Test() {
var client *PoolTest
// 从连接池中获取一个实例
obj, _ := pCommonPool.BorrowObject()
// 转换为对应实体
if obj != nil {
client = obj.(*PoolTest)
}
// 调用需要的方法
fmt.Println(client.Test())
// 交还连接池
pCommonPool.ReturnObject(client)
}
输出如下:
第一次使用将会调用初始化方法
初始化PoolTest类!!!
PoolTest
第二次使用将会复用初始化好的实例
PoolTest
连续多次并发调用当连接池不够用的会扩充连接池
PoolTest
初始化PoolTest类!!!
PoolTest
PoolTest
初始化PoolTest类!!!
PoolTest
PoolTest
3 总结
在使用过程中要是有任何问题都可以直接在文章下留言,希望这篇文章可以帮助大家解决眼前的问题,多谢大家的支持!
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!
- ExtJs学习笔记(16)_Form布局
- JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象
- 未来几年苹果公司很可能“不务正业”,进军汽车无人驾驶界
- ExtJs学习笔记(15)_fit布局
- JavaScript之call()和apply()方法详解
- Javascript快速入门(下篇)
- JavaScript引用类型之Array数组的栈方法与队列方法
- ExtJs学习笔记(14)_Column布局
- 高级盲注—floor,rand,group by报错注入
- 刷脸注册、试装、支付……仅靠一张脸就能买买买的时尚店开业了
- JavaScript引用类型之Array数组之强大的splice()方法
- Linux快速入门03-系统管理
- JavaScript引用类型之Array数组的concat()和push()方法的区别
- JavaScript引用类型之Array数组的排序方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- leetcode链表之删除链表的节点
- Windows 技术篇-通过注册表查找vc运行库所在位置实战演示,通过ProductCode查看vc++运行库安装位置
- Python 库安装问题-whl is not a supported wheel on this platform.原因及解决办法
- 安装Go运行环境
- Python 语法问题-module 'pip' has no attribute 'pep425tags',告诉你如何正确查看pip支持,32位、64位查看pip支持万能方法
- 使用matplotlib绘制3D图表
- 微服务的用户认证与授权杂谈(下)
- Python 库安装问题-用pip安装pyHook3报错,原因及解决办法
- 微服务的用户认证与授权杂谈(上)
- Python 技术篇-win32、amd64结尾的whl库该选哪个,如何查看python平台支持
- Python 基础篇-pip卸载python库方法,pip命令大全
- Python 技术篇-pip安装的python库缓存位置查看方法,如何查看python库源码
- Redis持久化 - RDB和AOF
- Python 技术篇-pip只下载python库不安装方法,pip命令大全
- Python 技术篇-将项目打包成whl文件,whl包的制作方法