连接池

Spring Cloud OkHttp设计原理

瘦欲@ 提交于 2019-12-06 03:30:54
Spring Cloud 框架最底层核心的组件就是服务调用方式,一般Spring Cloud框架采用的是HTTP的调用框架,本文将在 Spring Cloud应用场景下,介绍组件 OkHttp3 的设计原理。 1. Spring Cloud的接口调用工作模式 Spring Cloud接口调用基本工作方式 Spring Cloud作为组合式的分布式微服务解决方案,再服务调用上,至少需要解决如下几个环节: 面向接口的编程形式 接口调用过程,除了拼装Http请求外,为了提高接口调用的无感性,在这个环节上,目前采用的是Feign工具完成的。至于feign的工作原理,请参考我的另一篇博文: 客户端负载均衡Feign之三:Feign设计原理 服务负载均衡和选择机制 作为分布式调用框架,服务消费方需要通过一定的机制知道应当调用某一特定服务提供方实例,Spring Cloud 目前采用的是 Ribbon来完成的。至于Ribbon的工作原理,请参考我的另一篇博文: Spring Cloud Ribbon设计原理 . 作为http 客户端,向服务器发起Http请求 Http客户端在Java语言中,目前比较流行的有 Apache HttpClients components , HttpUrlConnection , OkHttp 等, OkHttp 在性能、体积各方面表现比较好,采用此框架作为http

05-01 爬虫高性能相关

寵の児 提交于 2019-12-06 01:12:22
05-01 爬虫高性能相关 一 背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低。 需要强调的是:对于单线程下串行N个任务,并不完全等同于低效,如果这N个任务都是纯计算的任务,那么该线程对cpu的利用率仍然会很高,之所以单线程下串行多个爬虫任务低效,是因为爬虫任务是明显的IO密集型程序。 关于IO模型详见 链接:http://www.cnblogs.com/linhaifeng/articles/7454717.html 那么该如何提高爬取性能呢?且看下述概念 二 同步、异步、回调机制 1、同步调用:即提交一个任务后就在原地等待任务结束,等到拿到任务的结果后再继续下一行代码,效率低下 同步调用 2、一个简单的解决方案:多线程或多进程 #在服务器端使用多线程(或多进程)。多线程(或多进程)的目的是让每个连接都拥有独立的线程(或进程),这样任何一个连接的阻塞都不会影响其他的连接。 多进程或多线程 该方案的问题是: #开启多进程或都线程的方式,我们是无法无限制地开启多进程或多线程的:在遇到要同时响应成百上千路的连接请求,则无论多线程还是多进程都会严重占据系统资源,降低系统对外界响应效率,而且线程与进程本身也更容易进入假死状态。 3、改进方案: 线程池或进程池

java中的各种池

梦想的初衷 提交于 2019-12-06 00:33:01
常量池、线程池、连接池 一、常量池 1、什么是常量 是一种值,这个值本身 例如:八大基本数据类型 加字符串 不可变的变量,被final修饰的 例如 final int i=1; String str="hello"; 2、作用 为了避免频繁的创建和销毁对象而影响系统性能,实现了对象的共享 二、线程池 ThreadPool 作用:限制系统中执行线程的数量 理解:在系统环境下,可以自动或手动设置线程数量,达到运行的最佳效果,少了浪费系统资源,多了系统阻塞。 线程池控制线程数量,其他线程排队。一个任务执行完毕,从队列中取最前面任务执行。若队列没有等待进程,线程池处于等待。当新任务运行,如果线程池有等待线程,就开始运行,否则进入等待队列。 三、连接池 为了能够重复利用数据库连接,提高对请求的相应时间和服务器的性能,采用数据库连接池技术。 连接池预先建立多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到来时,从池中取出一个连接对象为客户端服务,当请求完成后,客户端调用close() 方法,将连接对象放回池中。 来源: https://www.cnblogs.com/xinghaonan/p/11953826.html

java连接池的maxIdle该如何配置

烈酒焚心 提交于 2019-12-05 23:14:46
问题现象 用60个线程并发访问某个读和写均有的业务接口,性能测试人员查看Oracle数据库负载CPU非常高,而且oracle的 Logons指标达到 148.1次 /秒(这个值的含义是数据库客户端登录认证的每秒的次数)。 而且查看应用程序中的线程栈,也发现了较多数量的线程处于创建新的oracle物理连接处。 这当时就让我有点儿糊涂了,我们不是用了连接池吗?怎么还会经常创建物理连接呢? 问题分析解决 遇到这个问题,我当时也是从自己掌握的各种知识里去想可能的原因,都想到了是不是因为tcp连接的超时时间是不是太短,仔细一想这些可能性都排除掉了。然后查看连接池的配置,当时我们的同学告诉我这些配置跟线上的是一样的,应该没有问题,我当时是就怀疑是maxIdle设置太小导致的原因,但是没有什么具体的依据。 所以我就简单开发了一个页面可以实时查看当时应用连接池的active number(当前被使用的数据库连接数)和idle number(当前处于空闲状态的数据库连接数)。再次运行测试脚本,通过查看连接池的连接数就可以看出来,连接数的波动较大,有时候连接总数(上面两个数字相加)从20多突然降到10,说明物理连接被销毁了,创建了新的物理连接,那这就与我们看到的一些异常现象相吻合了,创建新的连接就会导致oracle数据库服务器的logons数量增加。由于连接的复用率较差,导致频繁的创建物理连接

Redis缓存的使用

。_饼干妹妹 提交于 2019-12-05 20:33:50
1、配置文件pom里面添加redis依赖 <!-- redis客户端:Jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 2、配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://www.springframework.org/schema/context 7 http://www.springframework.org

redis的jedis连接池:JedisPool

不想你离开。 提交于 2019-12-05 17:51:28
* 使用:    1. 创建JedisPool连接池对象    2. 调用方法 getResource()方法获取Jedis连接     //0.创建一个配置对象     JedisPoolConfig config = new JedisPoolConfig();     config.setMaxTotal(50);     config.setMaxIdle(10);     //1.创建Jedis连接池对象     JedisPool jedisPool = new JedisPool(config,"localhost",6379);     //2.获取连接     Jedis jedis = jedisPool.getResource();     //3. 使用     jedis.set("hehe","heihei");     //4. 关闭 归还到连接池中     jedis.close(); * 连接池工具类 public class JedisPoolUtils { private static JedisPool jedisPool; static{ //读取配置文件 InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties"

Jmeter如何连接数据库(MySQL)?

独自空忆成欢 提交于 2019-12-05 17:25:40
1.先下载Mysql驱动,放到Jmeter的lib目录下。(链接: https://pan.baidu.com/s/1-T3OHeXTUqLw5eL4tMtIhA 提取码: uwtu) 2.右键添加-配置元件-JDBC Connection Configuration 3.设置下列参数并保存: ariable Name :连接池名称 Database URL :jdbc: mysql://host:port/db ( jdbc: mysql://ip 地址:端口号/数据库名称 ) JDBC Driver class :com.mysql.jdbc.Driver username :连接数据库的用户名(如root) password :连接数据库的密码 4.添加JDBC Request取样器 5.填写下面参数并保存 Variable Name :连接池名称必须与之前在JDBC Connection Configuration中设置的连接池名称(ariable Name)一致 SQL Query :填写对应类型的SQL语句 6.运行并查看结果树 从上图中我们可以看到Jmeter连接MySQL已经成功了,后续就可以像HTTP请求一样对JDBC Request的请求和响应数据做各种梳理了 7.注意点 如果是先启动了Jmeter,后面才将Mysql驱动放到Jmeter的lib目录下

Spring boot如何快速的配置多个Redis数据源

拜拜、爱过 提交于 2019-12-05 17:15:22
简介 redis 多数据源主要的运用场景是在需要使用多个 redis 服务器或者使用多个 redis 库,本文采用的是 fastdep 依赖集成框架,快速集成 Redis 多数据源并集成 lettuce 连接池,只需引入依赖后在 yaml 文件中配置多数据源连接信息即可。 源码地址 希望大家可以star支持一下,后续还会加入其它依赖的简易整合。 https://github.com/louislivi/fastdep 引入依赖 Maven <dependency> <groupId>com.louislivi.fastdep</groupId> <artifactId>fastdep-redis</artifactId> <version>1.0.1</version> </dependency> Gradle compile group: 'com.louislivi.fastdep', name: 'fastdep-redis', version: '1.0.1' 配置文件 fastdep: redis: redis1: #连接名称 database: 0 host: 192.168.12.88 port: 6379 lettuce: #下面为连接池的补充设置 shutdown-timeout: 100 # 关闭超时时间 pool: max-active: 18 #

(二)MVC项目+c3p0连接池

♀尐吖头ヾ 提交于 2019-12-05 16:49:02
一.项目架构 注:删除了原有的数据库工具,添加了c3p0数据库工具类,添加了c3p0的配置文件,修改了Dao类以及servlet类 二.修改或添加的类 1.C3p0Helper(暂时不了解事务回滚之类的怎么用或者有什么用,只用了连接和关闭) package helper; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3p0Helper { private static String configName = "mysql"; //如果无参,则使用c3p0-config.xml中的default-config,该处使用mysql的配置 private static DataSource ds = new ComboPooledDataSource(configName); /** * 它为null表示没有事务 * 它不为null表示有事务 * 当开启事务时,需要给它赋值 * 当结束事务时,需要给它赋值为null * 并且在开启事务时,让dao的多个方法共享这个Connection */ private static