连接池

mysql_connect和mysql_pconnect的区别

落爺英雄遲暮 提交于 2019-12-01 11:13:29
php中mysql_pconnect()的实现方式:其实mysql_pconnect()本身并没有做太多的处理,它唯一做的只是在php运行结束后不主动close掉mysql的连接。mysql_pconnect()与mysql_connect()的区别包括:   cgi方式下:在php经cgi方式运行时pconnect和connect是基本没有区别的,因为cgi方式是每一个php访问起一个进程,访问结束后进程也就结束了,资源也全释放了。   apache模块方式下:区别在于当php以apache模块方式运行时,由于apache有使用进程池,一个httpd进程结束后会被放回进程池,这也就使得用pconnect打开的的那个mysql连接资源不被释放,于是有下一个连接请求时就可以被复用。这就使得在apache并发访问量不大的时候,由于使用了pconnect,php节省了反复连接db的时间,使得访问速度加快。这应该是比较好理解的。但是在apache并发访问量大的时候,如果使用pconnect,会由于之前的一些httpd进程占用的mysql连接没有close,则可能会因为mysql已经达到最大连接着,使得之后的一些请求永远得不到满足。   例如:若mysql最大连接数设为500,而apache的最大同时访问数设为2000,假设所有访问都会要求访问db,而且操作时间会比较长

redis连接池

风流意气都作罢 提交于 2019-12-01 10:22:34
一、配置文件 1. db.properties配置文件#IP地址 redis.ip = 127.0.0.1 #端口号 redis.port=6379 #最大连接数 redis.max.total=20 #最大空闲数 redis.max.idle=10 #最小空闲数 redis.min.idle=2 #效验使用可用连接 redis.test.borrow=true #效验归还可用连接 redis.test.return=false2. pom.xml文件 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version></dependency> 二、java代码 public class RedisPool { private static JedisPool pool ; //jedis连接池 private static Integer maxTotal = Integer.parseInt(PropertiesUtil.getProperty("redis.max.total","20")); //最大连接数 private static Integer maxIdle = Integer.parseInt(PropertiesUtil

将连接池配置到Tomcat的配置文件中

两盒软妹~` 提交于 2019-12-01 10:16:32
找到tomcat的配置文件context.xml 在Context标签中加入: <Resource name="jdbc/mysql" factory="com.alibaba.druid.pool.DruidDataSourceFactory"; auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" username="root" password="******" maxIdle="10" maxActive="100" maxWait="10000" /> 这里使用的是阿里巴巴的Druid连接池,所以配置了factory,也可以不写factory使用默认的dbpc连接池 如何使用 :必须保证项目在tomcat上,并且启动了tomcat DataSource ds = null; try{ Context context = new InitialContext(); ds = (DataSource)context.lookup("java:/comp/env/jdbc/mysql"); //--jdbc/mysql--是配置文件中的name属性 System.out.println

proxysql 系列 ~ 知识点总结

自闭症网瘾萝莉.ら 提交于 2019-12-01 09:44:18
proxysql 知识点总结 1 读写分离搭建(核心) 2 variables熟悉 1 admin 2 mysql 3 variables优化 4 db熟悉 1 main 2 stats 3 monitor 5 后端mysql高可用 6 本身高可用/负载均衡 7 监控 8 性能问题排查 9 原理理解 1 读写分离过程 2 检测延时过程 3 连接池复用原理 10 备份和还原 来源: https://www.cnblogs.com/danhuangpai/p/11675802.html

spring配置c3p0连接池

一笑奈何 提交于 2019-12-01 07:59:47
一、spring配置c3p0连接池 1、导入spring、c3p0的jar包以及MySQL驱动 2、将链接池所用的属性抽象到db.properties文件中 jdbc.user=root jdbc.password=root jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc:mysql:///spring jdbc.initPoolSize=5 jdbc.maxPoolSize=10 3、在spring配置文件中配置连接池 <!-- 导入资源文件--> <context:property-placeholder location="classpath:db.properties"></context:property-placeholder> <!--配置c3p0数据源--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> <property name="jdbcUrl" value="$

【J2EE系列】JNDI与tomcat连接池

一曲冷凌霜 提交于 2019-12-01 07:32:06
JNDI 与tomcat连接池 本章内容 ² JNDI与JNDI服务器 ² 编码实现JNDI目录服务与命名服务 ² 使用Tomcate JNDI服务器 一、JNDI概述 1、 什么是JNDI? 英文全称是:Java Naming and Directory Interface 命名服务提供了一种为对象命名的机制,这样你就可以在无需知道对象位置的情况下获取和使用对象。只要该对象在命名服务器上注册过,且你必须知道命名服务器的地址和该对象在命名服务器上注册的JNDI名。就可以找到该对象,获得其引用,从而运用它提供的服务。 利用JNDI可以寻找在命名服务器上注册过的所有对象。 JNDI就是为JAVA中命名和目录服务定义的JAVA API,是命名服务的抽象机制。我们可以直接通过JNDI来操作命名服务,而不要与底层的命名服务器交互,大大减轻了程序员的压力。 2、什么是JNDI server? 能提供目录或命名服务的服务器,相当于数据库。 常见JNDI服务器:DNS、XNam 、Novell目录服务、 LDAP(Lightweight Directory Access Protocol 轻型目录访问协议)、 CORBA对象服务、 Tomcat数据源 EJB容器的Bean对象(通过jdni技术访问) 文件系统、 Windows XP/2000/NT/Me/9x的注册表、 RMI、DSML v1

jedis参数不当引发的问题总结

萝らか妹 提交于 2019-12-01 07:32:06
jedis参数不当引发dubbo服务线程池耗尽异常 现象:一个dubbo服务偶发性的出现个别机器甚至整个集群大量报线程池耗尽的问题。一开始对问题的处理比较粗暴,直接增加了10倍的线程数。但是问题依然偶尔出现,重启服务就可以暂时解决。后来,发现问题出现频率有点高,不得不花点时间认真分析了。 实际原因:jedis参数设置不当。实际仔细分析问题后发现每次出现异常最开始都是出现了大量的jedis连接池获取连接异常: redis.clients.jedis.exceptions.JedisConnection: Could not get a resource from the pool ...省略其他堆栈信息 Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect time out ...省略其他堆栈信息 而这些time out实际是redis节点故障或者网络抖动引起的。然后看看jedis配置, timeout 设置为1000, maxRedirect 为2,所以一旦出现redis连接问题,将会导致请求阻塞3s左右。而此服务的qps分摊到单机约为200,阻塞导致了dubbo请求的堆积,进而导致雪崩。处理方法:缩短timeout

DB连接池 原理与实现(Java & Golang)

大憨熊 提交于 2019-12-01 07:30:21
自用笔记,未完成。 1. 原理 1)为什么需要DB连接池 一次DB连接开销较为昂贵   - 创建一次TCP连接   - DB连接需要server为连接分配buffer缓存,频繁连接/关闭造成连接I/O开销大 2)池化技术 (此处开始不经过大脑的typing 用于优化大请求量时系统运行效率,降低系统频繁建立连接的系统开销。线程池、对象池、数据库连接池都应用了类似的技术。 通常规定以下配置   - 最小/最大连接数   - 阻塞队列等 此外会有探活机制、强制回收、监控一类的配套功能。 2. DB连接池 1)JAVA连接池实现 2)Golang database/sql包实现 https://mp.weixin.qq.com/s/vSZpF55u4O343B4e0_TOvw 改包内部实现了连接池管理,仅对下层驱动暴露简单的驱动接口,这意味着,不同数据库的驱动只需要基于单个接口调用,而不需要关心连接池的实现。 具体层级关系如下:application -> API -> [including connection pooling] -> driver API -> go-sql-driver -> MYSQL 整体来说,Golang的接口与JAVA可以一一对应,Driver, Conn,Stmt, Tx, Rows 调用关系:   1) Open取得新的Conn   2)

java基础(30):DBUtils、连接池

北城以北 提交于 2019-12-01 07:22:17
1. DBUtils 如果只使用 JDBC 进行开发,我们会发现冗余代码过多,为了简化 JDBC 开发,本案例我们讲采用 apache commons 组件一个成员: DBUtils 。 DBUtils 就是 JDBC 的简化开发工具包 。需要项目导入commons-dbutils-1.6.jar 才能够正常使用 DBUtils 工具。 1.1 概述 DBUtils 是 java 编程中的数据库操作实用工具,小巧简单实用。 DBUtils 封装了对 JDBC 的操作,简化了 JDBC 操作,可以少写代码。 Dbutils 三个核心功能介绍   QueryRunner 中提供对 sql 语句操作的 API.   ResultSetHandler 接口,用于定义 select 操作后,怎样封装结果集 .   DbUtils 类,它就是一个工具类 , 定义了关闭资源与事务处理的方法 1.2 QueryRunner 核心类 update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作 query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作 1.3 QueryRunner 实现添加

4-2 阻塞IO

给你一囗甜甜゛ 提交于 2019-12-01 06:49:37
阻塞IO(blocking IO) 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。对于network io来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的UDP包),这个时候kernel就要等待足够的数据到来。 而在用户进程这边,整个进程会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存, 然后kernel返回结果,用户进程才解除block的状态,重新运行起来。 所以,blocking IO的特点就是在IO执行的两个阶段(等待数据和拷贝数据两个阶段)都被block了。 几乎所有的程序员第一次接触到的网络编程都是从listen\(\)、send\(\)、recv\(\) 等接口开始的, 使用这些接口可以很方便的构建服务器/客户机的模型。然而大部分的socket接口都是阻塞型的。如下图 ps: 所谓阻塞型接口是指系统调用(一般是IO接口)不返回调用结果并让当前线程一直阻塞 只有当该系统调用获得结果或者超时出错时才返回。 实际上,除非特别指定,几乎所有的IO接口 ( 包括socket接口 ) 都是阻塞型的。这给网络编程带来了一个很大的问题,如在调用recv(1024)的同时,线程将被阻塞