Golang 实现的连接池

功能:

* 连接池中连接类型为interface{},使得更加通用

* 链接的最大空闲时间,超时的链接将关闭丢弃,可避免空闲时链接自动失效问题

* 使用channel处理池中的链接,高效

基本用法

//factory 创建连接的方法
factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:4000") } //close 关闭链接的方法
close := func(v interface{}) error { return v.(net.Conn).Close() } //创建一个连接池: 初始化5,最大链接30
poolConfig := &pool.PoolConfig{
InitialCap: 5,
MaxCap: 30,
Factory: factory,
Close: close,
//链接最大空闲时间,超过该时间的链接 将会关闭,可避免空闲时链接EOF,自动失效的问题
IdleTimeout: 15 * time.Second,
}
p, err := pool.NewChannelPool(poolConfig)
if err != nil {
fmt.Println("err=", err)
} //从连接池中取得一个链接
v, err := p.Get() //do something
//conn=v.(net.Conn) //将链接放回连接池中
p.Put(v) //释放连接池中的所有链接
p.Release() //查看当前链接中的数量
current := p.Len()

https://github.com/silenceper/pool

Golang 通用连接池库 Golang-Pool的更多相关文章

  1. python socketpool:通用连接池(转)

    简介 在软件开发中经常要管理各种“连接”资源,通常我们会使用对应的连接池来管理,比如mysql数据库连接可以用sqlalchemy中的池来管理,thrift连接可以通过thriftpool管理,red ...

  2. python socketpool:通用连接池

    简介 在软件开发中经常要管理各种“连接”资源,通常我们会使用对应的连接池来管理,比如mysql数据库连接可以用sqlalchemy中的池来管理,thrift连接可以通过thriftpool管理,red ...

  3. 连接池(Connection Pool)技术

    解释: 连接池(Connection Pool)技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用.分配.管理策略,使得该连接池中的连接可以得到高效.安全的复用,避免了数据库连接频繁 ...

  4. Golang SQL连接池梳理

    目录 一.如何理解数据库连接 二.连接池的工作原理 三.database/sql包结构 四.三个重要的结构体 4.1.DB 4.2.driverConn 4.3.Conn 五.流程梳理 5.1.先获取 ...

  5. JDBC----数据库连接池(connection pool)

    •数据库连接池的基本思想就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再 ...

  6. redis mysql 连接池 之 golang 实现

    1 mysql 连接池代码 package lib import ( "database/sql" "fmt" "strconv" &quo ...

  7. 使用 Tomcat 7 新的连接池 —— Tomcat jdbc pool

    Tomcat 在 7.0 以前的版本都是使用 commons-dbcp 做为连接池的实现,但是 dbcp 饱受诟病,原因有: dbcp 是单线程的,为了保证线程安全会锁整个连接池 dbcp 性能不佳 ...

  8. golang redis连接池使用方法

    package main import ( "fmt" "github.com/garyburd/redigo/redis" ) var pool *redis ...

  9. golang的连接池例子

    github.com/jolestar/go-commons-pool 测试代码 package main import ( "github.com/jolestar/go-commons- ...

随机推荐

  1. redis简单主从复制

    两台ubuntu 云服务器,分别redis主从服务器,ip地址是:123.207.96.138(主)139.199.167.251(从) 安装redis,在这里我建议给redis设置密码,之前看过一篇 ...

  2. mybatis中#{}与${}的区别

    今天学习了下mybatis的查询,了解到了#{}与${}的区别, 配置文件如下: <?xml version="1.0" encoding="UTF-8" ...

  3. java学习日记-基础-列出2~100内的素数

    素数的概念:一个整数如果只能整除1和它本身,那么这个整数就是一个素数 方法一:素数是除去能被2整除.3整除.5整除.7整除的整数,但包含2,3,5,7 public class Sushu { pub ...

  4. 两个Web应用必须的Servlet Filter

    其实原文是一个英文文章“Two Servlet Filters Every Web Application Should Have” 文章说了2个Filter: GzipFilter ChcheFil ...

  5. Mac Launchpad出现两个相同快捷方式的解决办法

    进入以下目录 ~/Library/Application Support/Dock 把里面的.db文件删掉,然后注销重新登录即可.    

  6. Linux服务器安全审计工具与流程完全指南

    http://Linux.chinaitlab.com/server/860516.html 当今许多linux服务器都不是刚刚部署完毕的新机器,有专业的Linux系统管理员进行定期维护,IT技术人员 ...

  7. Coursera-AndrewNg(吴恩达)机器学习笔记——第三周编程作业

    一. 逻辑回归 1.背景:使用逻辑回归预测学生是否会被大学录取. 2.首先对数据进行可视化,代码如下: pos = find(y==); %找到通过学生的序号向量 neg = find(y==); % ...

  8. C++判断字符串是否为空的一个小问题

    刚才visual studio下处理一个函数字符串入参,判断入参字符串是否为空有点小问题. 接口函数声明是这样的:SHORT GETWFSINFPINKEYDETAIL(LPCTSTR strKeyN ...

  9. yii2实战之初见端倪

    PHP框架大PK php框架有很多种,在国内应用较多的有:Thinkphp, Yii, Laravel, Codeigniter等.关于这些框架,孰优孰劣,是一个极具争议性的话题.各方支持者总能拿出自 ...

  10. SpringMVC解决跨域的两种方案

    1. 什么是跨域 2. 跨域的应用情景 3. 通过注解的方式允许跨域 4. 通过配置文件的方式允许跨域 1. 什么是跨域 跨域,即跨站HTTP请求(Cross-site HTTP request),指 ...