iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >golang中mysql数据库连接池的示例分析
  • 843
分享到

golang中mysql数据库连接池的示例分析

2023-06-15 01:06:48 843人浏览 薄情痞子
摘要

这篇文章主要介绍golang中mysql数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标

这篇文章主要介绍golangmysql数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Golang的优点

golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器而无需额外的依赖,所以golang的性能优于其他的解释性语言,且可以在golang中使用goroutine来实现并发性,它提供了一个非常优雅的goroutine调度程序系统,可以很容易地生成数百万个goroutine。

最近在使用go语言的ORM做一些数据库的操作,最后发现了一个bug就是invalid connection,所以就去的了解了一下链接池和Mysql的超时时间,下面我就用go的orm+mysql来说明(我理解语言都是相通的,原理应该都是一样的)。

在我们要对数据库进行增删改查的时候,第一步就是要去连接数据库

//conn the databasefunc ConnDb(dbConnString string, dbName string) error {maxIdle := 50maxConn := 50err := orm.ReGISterDataBase(dbName, "mysql", dbConnString+"?charset=utf8&loc=Asia%2FShanghai", maxIdle, maxConn)if err != nil {util.GLogger.Errorw("in Connect DB", "err", err)}return err}

这里面连接的就是mysql数据库,设置的最大连接池为50,最大空闲连接是50。

而这个连接池主要是做什么的呢?简单的说就是,你要去数据库里面拿数据改数据,你就需要和数据库建立起一个管道,这个就是建立一个网络连接,我们都知道tcp连接是比较耗时的,那么既然已经花了一定时间去建立了这个管道,那么我怎么才能随取随用,而不用丢弃呢?那么连接池就是存放这些已经建立的管道的地方,50这个数值呢,可以简单的理解成最多放50个管道,注意,这个并不是越大越好,因为太大的话会比较占内存,当然了太小了会出现等待阻塞的情况。

既然连接池里面就是放这些管道的,那么空闲连接就是指这些空闲的管道,那么就很明显了,空闲连接的数值设置就不要大于连接池的大小了,因为大了连接池也不会帮你保存那么多的空闲连接管道的。

了解了这些简单的概念之后,那么每次访问数据库的时候是怎么一个工作流呢?

golang中mysql数据库连接池的示例分析

通过这个图我们就可以很清晰的看到整个连接访问的流程。

step1(获取可用的连接)去连接池里面寻找可用的空闲连接,如果没有空闲的连接了,那么就去判断是否连接池已满,如果没有超过,那么就去新建一个连接,如果满了,那么就等待连接的释放;当然了,如果有空闲连接的话,就直接判断这个连接是否过期,没有过期就直接用,过期了就重新去判断这个连接池是否已经满了,没有的话就去新建连接,满了就等待。

step2 (操作数据库)拿到了这个连接就去做增删改查操作。

step3 (释放连接)操作完数据库之后需要释放连接,那么释放的连接就会空闲下来,如果超过空闲连接数,就是直接关闭掉,如果没有就给等待的使用。

那么你就会注意到了,这个连接是会失效的:

mysql数据库的timeout,当你和数据库建立起连接的时候,数据库不能一直信任你啊,那么数据库就有了超时这一说,就是过了这个时间段我就不信任你这个连接了,你必须再次和我连接,查看数据库设置的各种超时时间的语句如下:

show variables like  '%timeout%';

其中这里面会有两个超时时间:交互式连接超时时间(interactive_timeout)和非交互式连接超时时间(wait_timeout)

交互式连接:就是你通过命令行与mysql连接

非交互式连接:就是在程序中与mysql连接

而这个非交互超时时间就是在连接池里面一直空闲的连接的空闲时间超过wait_timeout的设定的时候就会失效。那么这个时候当程序拿到这个空闲连接的时候去做查询的时候就会出现最开始出现的问题,invalid connection。

了解了基本原理之后,针对invalid connection无效连接的解决办法就很简单了:

 延长数据库的wait_timeout时间。

程序定时去检查这些失效的连接及时丢弃掉,注意这里程序的检查时间就需要小于mysql设置的wait_timeout的值。

以上是“golang中mysql数据库连接池的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: golang中mysql数据库连接池的示例分析

本文链接: https://www.lsjlt.com/news/276270.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang中mysql数据库连接池的示例分析
    这篇文章主要介绍golang中mysql数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标...
    99+
    2023-06-15
  • Express连接MySQL及数据库连接池的示例分析
    这篇文章主要介绍Express连接MySQL及数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Express连接MySQL准备工作打开webstorm新建项目选择express创建一个expres...
    99+
    2023-06-29
  • Java操作数据库连接池实例分析
    这篇文章主要介绍“Java操作数据库连接池实例分析”,在日常操作中,相信很多人在Java操作数据库连接池实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java操作数据库连接池实例分析”的疑惑有所帮助!...
    99+
    2023-06-20
  • python3 实现mysql数据库连接池的示例代码
    dbutils封装文件传送门 DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来自Webware for Python。...
    99+
    2024-04-02
  • Jdbc连接常见数据库的示例分析
    Jdbc连接常见数据库的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.Jdbc连接Access数据库①通过控制面板>&g...
    99+
    2024-04-02
  • golang连接mysql数据库操作使用示例
    目录安装连接数据库处理类型(Handle Types)建表Exec使用Exec增删该示例sql预声明(Prepared Statements)QueryQueryxQueryRow和...
    99+
    2024-04-02
  • Spring数据库连接池实现原理实例分析
    这篇“Spring数据库连接池实现原理实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring数据库连接池实现原理...
    99+
    2023-07-04
  • Express连接MySQL及数据库连接池技术实例
    目录Express连接MySQL准备工作创建配置文件创建操作数据库的接口文件数据库连接池技术什么是数据库连接池数据库连接池的作用是什么?数据库连接池技术实例1、导入mysql模块2、...
    99+
    2024-04-02
  • MySQL数据库的示例分析
    这篇文章给大家分享的是有关MySQL数据库的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、数据库概要数据库(Database)是存储与管理数据的软件系统,就像一个存入...
    99+
    2024-04-02
  • javascript连接mysql与php通过odbc连接任意数据库的示例分析
    这篇文章主要介绍了javascript连接mysql与php通过odbc连接任意数据库的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下...
    99+
    2024-04-02
  • mysql数据库中mycli的示例分析
    这篇文章给大家分享的是有关mysql数据库中mycli的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。可以先看下效果图:如果自己不去尝试,可能感受没那么强烈,所以不如自己...
    99+
    2024-04-02
  • SpringBoot集成Druid连接池连接MySQL8.0.11的示例分析
    这篇文章主要介绍SpringBoot集成Druid连接池连接MySQL8.0.11的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.配置依赖依赖管理我们可以使用maven或者gradleMySQL Conn...
    99+
    2023-06-20
  • MySQL数据库中多表查询之内连接,外连接,子查询的示例分析
    小编给大家分享一下MySQL数据库中多表查询之内连接,外连接,子查询的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!多表...
    99+
    2024-04-02
  • 关于node+mysql数据库连接池连接
     mysql有两种连接方式:一种是直接连接 另一种是池化连接,我们这篇讲的是池化连接。 为了让解惑,我简答的写份直接连接的代码,如下: var mysql = requi...
    99+
    2023-05-16
    node+mysql node连接mysql
  • MySQL数据库中数据约束的示例分析
    这篇文章主要介绍了MySQL数据库中数据约束的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为了防止不符合规范的数据进入数据库,在用...
    99+
    2024-04-02
  • 如何为 Golang 数据库连接配置连接池?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • MySQL中多表连接的示例分析
    这篇文章主要介绍MySQL中多表连接的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!连接可用于查询,更新,建立事实外键(指人为建立的两张表的对应关系,相对的,FORGIEN ...
    99+
    2024-04-02
  • golang操作连接数据库实现mysql事务示例
    目录mysql驱动posgre驱动连接postgres连接mysql初始化连接SetMaxOpenConnsSetMaxIdleConnsCRUD查询单行查询QueryRow多行查询...
    99+
    2024-04-02
  • mysql连接慢的示例分析
    小编给大家分享一下mysql连接慢的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一个同事今天反应公司的mysql机器反...
    99+
    2024-04-02
  • golang数据库连接池设置多少
    golang数据库连接池设置多少取决于数据库类型、数据库配置、服务器性能、并发需求等。详细说明:1、数据库类型,不同的数据库类型可能有不同的并发连接限制,需要根据所使用的数据库类型来确定连接池的大小;2、数据库配置,一些数据库允许通过配置文...
    99+
    2023-12-14
    Golang
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作