Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
148295f
同步原仓库
LiWenGu Oct 11, 2019
a18fb06
#510 modify kafaka to kafka
0xPoe Oct 21, 2019
a1ce9d6
#511 fix typo error
0xPoe Oct 21, 2019
812ff5a
#496 fix typo error
0xPoe Oct 21, 2019
518e9b0
Merge remote-tracking branch 'upstream/master'
LiWenGu Oct 22, 2019
049fae9
增加推荐书籍
LiWenGu Oct 22, 2019
a4742fd
Update basis-of-authority-certification.md
Snailclimb Oct 23, 2019
5be91e2
Update README.md
Snailclimb Oct 23, 2019
6254014
Update README.md
Snailclimb Oct 25, 2019
d4e0ef6
Merge pull request #512 from Rustin-Liu/rustin-patch-1
Snailclimb Oct 25, 2019
b5ce81a
Merge pull request #513 from Rustin-Liu/rustin-patch-2
Snailclimb Oct 25, 2019
723dc6a
Merge pull request #514 from Ryze-Zhao/master
Snailclimb Oct 25, 2019
df6ef6b
Merge pull request #515 from LiWenGu/hotfix/502
Snailclimb Oct 25, 2019
ce93489
简单的修改一些小问题
Snailclimb Oct 25, 2019
9fa8007
Merge branch 'master' of https://github.com/Snailclimb/JavaGuide
Snailclimb Oct 25, 2019
2cba842
Update 类加载器.md
Snailclimb Oct 27, 2019
c072cda
Update README.md
Snailclimb Oct 27, 2019
9733291
Update springboot-questions.md
Snailclimb Oct 27, 2019
ccae70b
Update springboot-questions.md
Snailclimb Oct 27, 2019
0daf095
Java学习路线和方法推荐
Snailclimb Oct 28, 2019
2dc34a5
Update java-learning-path-and-methods.md
Snailclimb Oct 28, 2019
c42447e
Update java-learning-path-and-methods.md
Snailclimb Oct 28, 2019
5ce9492
Update java-learning-path-and-methods.md
Snailclimb Oct 29, 2019
9cebad1
Update README.md
Snailclimb Oct 29, 2019
a4358aa
question:自学4个月可以找工作吗
Snailclimb Oct 29, 2019
83c3f0b
Merge branch 'master' of https://github.com/Snailclimb/JavaGuide
Snailclimb Oct 29, 2019
839ee4d
fix a typo issue
Oct 29, 2019
1330795
Update Java基础知识.md
ty5491003 Oct 30, 2019
358260b
Update java-training-4-month.md
Snailclimb Oct 30, 2019
39a4964
Update Docker.md
Snailclimb Oct 30, 2019
0174afc
Update README.md
Snailclimb Oct 30, 2019
d9534ba
Merge pull request #521 from ty5491003/master
Snailclimb Oct 30, 2019
a5f32c5
Create redis集群以及应用场景.md
huifer Oct 31, 2019
e176d77
Docker概念
Snailclimb Nov 1, 2019
5cdd782
阿里云服务器
Snailclimb Nov 1, 2019
cd33c26
Update Java编程规范.md
Snailclimb Nov 1, 2019
48e72bb
Update Java编程规范.md
Snailclimb Nov 1, 2019
1c4abc3
Update README.md
Snailclimb Nov 1, 2019
a0aba05
Update README.md
Snailclimb Nov 1, 2019
bb8191a
Update README.md
Snailclimb Nov 1, 2019
bd1fa70
Update README.md
Snailclimb Nov 1, 2019
039d7f9
Java 编程规范以及优雅Java代码实践总结
Snailclimb Nov 1, 2019
e4a4911
Merge pull request #520 from yushihui/master
Snailclimb Nov 1, 2019
15b3150
Merge pull request #524 from huifer/master
Snailclimb Nov 1, 2019
00b7bc7
服务之间的调用为啥不直接用 HTTP 而用 RPC?
Snailclimb Nov 2, 2019
2ff4406
Merge branch 'master' of https://github.com/Snailclimb/JavaGuide
Snailclimb Nov 2, 2019
28d955d
Redis 集群以及应用
Snailclimb Nov 2, 2019
e30a978
Update why-use-rpc.md
Snailclimb Nov 3, 2019
59ba630
Update README.md
Snailclimb Nov 3, 2019
25c42e0
Update 后端程序员必备的Linux基础知识.md
Snailclimb Nov 4, 2019
5345b5d
Update Docker.md
Snailclimb Nov 4, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 50 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
点击关注[公众号](#公众号)及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。

作者的其他开源项目推荐:

1. [springboot-guide](https://github.com/Snailclimb/springboot-guide) : 适合新手入门以及有经验的开发人员查阅的 Spring Boot 教程(业余时间维护中,欢迎一起维护)。
2. [programmer-advancement](https://github.com/Snailclimb/programmer-advancement) : 我觉得技术人员应该有的一些好习惯!
3. [spring-security-jwt-guide](https://github.com/Snailclimb/spring-security-jwt-guide) :从零入门 !Spring Security With JWT(含权限验证)后端部分代码。
**[推荐一下阿里云双11的活动:云服务器1折起,仅86元/年,限量抢购!](https://www.aliyun.com/1111/2019/group-buying-share?ptCode=32AE103FC8249634736194795A3477C4647C88CF896EF535&userCode=hf47liqn&share_source=copy_link)** (仅限新人,老用户可以考虑使用家人或者朋友账号购买,推荐799/3年 2核4G 这个性价比和适用面更广。不懂怎么使用云服务器的朋友可以看这篇[阿里云服务器使用经验](docs/tools/阿里云服务器使用经验.md))。

<p align="center">
<a href="https://github.com/Snailclimb/JavaGuide" target="_blank">
Expand All @@ -23,9 +19,9 @@

<h3 align="center">Sponsor</h3>
<p align="center">
<a href="https://study.163.com/topics/JavaGuide/" >
<a href="https://url.163.com/hXm" >
<img src="https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-7/WechatIMG1.png"width="" style="margin: 0 auto;"/>
</a>
</a >
</p>

推荐使用 https://snailclimb.top/JavaGuide/ 在线阅读(访问速度慢的话,请使用 https://snailclimb.gitee.io/javaguide ),在线阅读内容本仓库同步一致。这种方式阅读的优势在于:有侧边栏阅读体验更好,Gitee pages 的访问速度相对来说也比较快。
Expand All @@ -39,7 +35,7 @@
- [JVM](#jvm)
- [I/O](#io)
- [Java 8](#java-8)
- [编程规范](#编程规范)
- [优雅 Java 代码必备实践(Java编程规范)](#优雅-java-代码必备实践java编程规范)
- [网络](#网络)
- [操作系统](#操作系统)
- [Linux相关](#linux相关)
Expand All @@ -51,14 +47,15 @@
- [Redis](#redis)
- [系统设计](#系统设计)
- [常用框架(Spring/SpringBoot、Zookeeper ... )](#常用框架)
- [数据通信(消息队列、Dubbo ... )](#数据通信)
- [权限认证](#权限认证)
- [设计模式(工厂模式、单例模式 ... )](#设计模式)
- [数据通信(消息队列、Dubbo ... )](#数据通信)
- [网站架构](#网站架构)
- [架构](#架构)
- [面试指南](#面试指南)
- [备战面试](#备战面试)
- [常见面试题总结](#常见面试题总结)
- [面经](#面经)
- [Java学习常见问题汇总](#java学习常见问题汇总)
- [工具](#工具)
- [Git](#git)
- [Docker](#Docker)
Expand Down Expand Up @@ -113,9 +110,9 @@
* [Java 8 学习资源推荐](docs/java/What's%20New%20in%20JDK8/Java8教程推荐.md)
* [Java8 forEach 指南](docs/java/What's%20New%20in%20JDK8/Java8foreach指南.md)

### 编程规范
### 优雅 Java 代码必备实践(Java编程规范)

- [Java 编程规范](docs/java/Java编程规范.md)
* [Java 编程规范以及优雅Java代码实践总结](docs/java/Java编程规范.md)

## 网络

Expand Down Expand Up @@ -161,7 +158,8 @@

* [Redis 总结](docs/database/Redis/Redis.md)
* [Redlock分布式锁](docs/database/Redis/Redlock分布式锁.md)
* [如何做可靠的分布式锁,Redlock真的可行么](docs/database/Redis/如何做可靠的分布式锁,Redlock真的可行么.md)
* [如何做可靠的分布式锁,Redlock真的可行么]()
* [几种常见的 Redis 集群以及使用场景](docs/database/Redis/redis集群以及应用场景.md)

## 系统设计

Expand All @@ -181,31 +179,38 @@
- [ZooKeeper 相关概念总结](docs/system-design/framework/ZooKeeper.md)
- [ZooKeeper 数据模型和常见命令](docs/system-design/framework/ZooKeeper数据模型和常见命令.md)

### 权限认证
### 数据通信

- **[权限认证基础:区分Authentication,Authorization以及Cookie、Session、Token](docs/system-design/authority-certification/basis-of-authority-certification.md)**
- **[JWT 优缺点分析以及常见问题解决方案](docs/system-design/authority-certification/JWT-advantages-and-disadvantages.md)**
- **[适合初学者入门 Spring Security With JWT 的 Demo](https://github.com/Snailclimb/spring-security-jwt-guide)**
- [数据通信(RESTful、RPC、消息队列)相关知识点总结](docs/system-design/data-communication/summary.md)
- [服务之间的调用为啥不直接用 HTTP 而用 RPC?](docs/system-design/data-communication/why-use-rpc.md)

### 设计模式
#### Dubbo

- [设计模式系列文章](docs/system-design/设计模式.md)
- [Dubbo 总结:关于 Dubbo 的重要知识点](docs/system-design/data-communication/dubbo.md)

### 数据通信
#### 消息中间件

- [数据通信(RESTful、RPC、消息队列)相关知识点总结](docs/system-design/data-communication/summary.md)
- [Dubbo 总结:关于 Dubbo 的重要知识点](docs/system-design/data-communication/dubbo.md)
- [消息队列总结](docs/system-design/data-communication/message-queue.md)
- [RabbitMQ 入门](docs/system-design/data-communication/rabbitmq.md)
- [RocketMQ的几个简单问题与答案](docs/system-design/data-communication/RocketMQ-Questions.md)
- [Kafka入门看这一篇就够了](docs/system-design/data-communication/Kafka入门看这一篇就够了.md)
- [Kafka系统设计开篇-面试看这篇就够了](docs/system-design/data-communication/Kafka系统设计开篇-面试看这篇就够了.md)

### 网站架构
### 权限认证

- **[权限认证基础:区分Authentication,Authorization以及Cookie、Session、Token](docs/system-design/authority-certification/basis-of-authority-certification.md)**
- **[JWT 优缺点分析以及常见问题解决方案](docs/system-design/authority-certification/JWT-advantages-and-disadvantages.md)**
- **[适合初学者入门 Spring Security With JWT 的 Demo](https://github.com/Snailclimb/spring-security-jwt-guide)**

### 设计模式

- [设计模式系列文章](docs/system-design/设计模式.md)

### 架构

- [一文读懂分布式应该学什么](docs/system-design/website-architecture/分布式.md)
- [8 张图读懂大型网站技术架构](docs/system-design/website-architecture/8%20张图读懂大型网站技术架构.md)
- [【面试精选】关于大型网站系统架构你不得不懂的10个问题](docs/system-design/website-architecture/【面试精选】关于大型网站系统架构你不得不懂的10个问题.md)
- [【面试精选】关于大型网站系统架构你不得不懂的10个问题](docs/system-design/website-architecture/关于大型网站系统架构你不得不懂的10个问题.md)

## 面试指南

Expand All @@ -232,6 +237,11 @@
- [蚂蚁金服2019实习生面经总结(已拿口头offer)](docs/essential-content-for-interview/BATJrealInterviewExperience/蚂蚁金服实习生面经总结(已拿口头offer).md)
- [2019年蚂蚁金服、头条、拼多多的面试总结](docs/essential-content-for-interview/BATJrealInterviewExperience/2019alipay-pinduoduo-toutiao.md)

## Java学习常见问题汇总

- [Java学习路线和方法推荐](docs/questions/java-learning-path-and-methods.md)
- [Java培训四个月能学会吗?](docs/questions/java-training-4-month.md)

## 工具

### Git
Expand All @@ -240,9 +250,13 @@

### Docker

* [Docker 入门](docs/tools/Docker.md)
* [Docker 基本概念解读](docs/tools/Docker.md)
* [一文搞懂 Docker 镜像的常用操作!](docs/tools/Docker-Image.md)

### 其他

- [阿里云服务器使用经验](docs/tools/阿里云服务器使用经验.md)

## 资源

### 书单
Expand All @@ -267,7 +281,7 @@

## 说明

### 介绍
### JavaGuide介绍

* **对于 Java 初学者来说:** 本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系有一个初步认识。另外,本文的一些文章
也是你学习和复习 Java 知识不错的实践;
Expand All @@ -277,6 +291,12 @@ Markdown 格式参考:[Github Markdown格式](https://guides.github.com/featur

利用 docsify 生成文档部署在 Github pages: [docsify 官网介绍](https://docsify.js.org/#/)

### 作者的其他开源项目推荐

1. [springboot-guide](https://github.com/Snailclimb/springboot-guide) : 适合新手入门以及有经验的开发人员查阅的 Spring Boot 教程(业余时间维护中,欢迎一起维护)。
2. [programmer-advancement](https://github.com/Snailclimb/programmer-advancement) : 我觉得技术人员应该有的一些好习惯!
3. [spring-security-jwt-guide](https://github.com/Snailclimb/spring-security-jwt-guide) :从零入门 !Spring Security With JWT(含权限验证)后端部分代码。

### 关于转载

如果你需要转载本仓库的一些文章到自己的博客的话,记得注明原文地址就可以了。
Expand Down Expand Up @@ -310,6 +330,10 @@ Markdown 格式参考:[Github Markdown格式](https://guides.github.com/featur
<a href="https://github.com/fanchenggang">
<img src="https://avatars2.githubusercontent.com/u/8225921?s=460&v=4" width="45px">
</a>
<a href="https://github.com/Rustin-Liu">
<img src="https://avatars2.githubusercontent.com/u/29879298?s=400&v=4" width="45px">
</a>

<a href="https://github.com/ipofss">
<img src="https://avatars1.githubusercontent.com/u/5917359?s=460&v=4" width="45px"></a>
<a href="https://github.com/Gene1994">
Expand Down
3 changes: 2 additions & 1 deletion docs/data/java-recommended-books.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,9 @@

### 设计模式

- [《设计模式 : 可复用面向对象软件的基础》 ](https://book.douban.com/subject/1052241/) (推荐,豆瓣评分 9.1):设计模式的经典!
- [《设计模式 : 可复用面向对象软件的基础》](https://book.douban.com/subject/1052241/) (推荐,豆瓣评分 9.1):设计模式的经典!
- [《Head First 设计模式(中文版)》](https://book.douban.com/subject/2243615/) (推荐,豆瓣评分 9.2):相当赞的一本设计模式入门书籍。用实际的编程案例讲解算法设计中会遇到的各种问题和需求变更(对的,连需求变更都考虑到了!),并以此逐步推导出良好的设计模式解决办法。
- [《大话设计模式》](https://book.douban.com/subject/2334288/) (推荐,豆瓣评分 8.3):本书通篇都是以情景对话的形式,用多个小故事或编程示例来组织讲解GOF(即《设计模式 : 可复用面向对象软件的基础》这本书)),但是不像《设计模式 : 可复用面向对象软件的基础》难懂。但是设计模式只看书是不够的,还是需要在实际项目中运用,结合[设计模式](docs/system-design/设计模式.md)更佳!

### 常用框架

Expand Down
149 changes: 149 additions & 0 deletions docs/database/Redis/redis集群以及应用场景.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
相关阅读:

- [史上最全Redis高可用技术解决方案大全](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247484850&idx=1&sn=3238360bfa8105cf758dcf7354af2814&chksm=cea24a79f9d5c36fb2399aafa91d7fb2699b5006d8d037fe8aaf2e5577ff20ae322868b04a87&token=1082669959&lang=zh_CN&scene=21#wechat_redirect)

# Redis 集群以及应用

## 集群
### 主从复制
#### 主从链(拓扑结构)
![主从](https://user-images.githubusercontent.com/26766909/67539461-d1a26c00-f714-11e9-81ae-61fa89faf156.png)

![主从](https://user-images.githubusercontent.com/26766909/67539485-e0891e80-f714-11e9-8980-d253239fcd8b.png)

#### 复制模式
- 全量复制:master 全部同步到 slave
- 部分复制:slave 数据丢失进行备份

#### 问题点
- 同步故障
- 复制数据延迟(不一致)
- 读取过期数据(Slave 不能删除数据)
- 从节点故障
- 主节点故障
- 配置不一致
- maxmemory 不一致:丢失数据
- 优化参数不一致:内存不一致.
- 避免全量复制
- 选择小主节点(分片)、低峰期间操作.
- 如果节点运行 id 不匹配(如主节点重启、运行 id 发送变化),此时要执行全量复制,应该配合哨兵和集群解决.
- 主从复制挤压缓冲区不足产生的问题(网络中断,部分复制无法满足),可增大复制缓冲区( rel_backlog_size 参数).
- 复制风暴

### 哨兵机制
#### 拓扑图
![image](https://user-images.githubusercontent.com/26766909/67539495-f0086780-f714-11e9-9eab-c11a163ac6c0.png)

#### 节点下线
- 客观下线
- 所有 Sentinel 节点对 Redis 节点失败要达成共识,即超过 quorum 个统一.
- 主管下线
- 即 Sentinel 节点对 Redis 节点失败的偏见,超出超时时间认为 Master 已经宕机.
#### leader选举
- 选举出一个 Sentinel 作为 Leader:集群中至少有三个 Sentinel 节点,但只有其中一个节点可完成故障转移.通过以下命令可以进行失败判定或领导者选举.
- 选举流程
1. 每个主观下线的 Sentinel 节点向其他 Sentinel 节点发送命令,要求设置它为领导者.
1. 收到命令的 Sentinel 节点如果没有同意通过其他 Sentinel 节点发送的命令,则同意该请求,否则拒绝.
1. 如果该 Sentinel 节点发现自己的票数已经超过 Sentinel 集合半数且超过 quorum,则它成为领导者.
1. 如果此过程有多个 Sentinel 节点成为领导者,则等待一段时间再重新进行选举.
#### 故障转移
- 转移流程
1. Sentinel 选出一个合适的 Slave 作为新的 Master(slaveof no one 命令).
1. 向其余 Slave 发出通知,让它们成为新 Master 的 Slave( parallel-syncs 参数).
1. 等待旧 Master 复活,并使之称为新 Master 的 Slave.
1. 向客户端通知 Master 变化.
- 从 Slave 中选择新 Master 节点的规则(slave 升级成 master 之后)
1. 选择 slave-priority 最高的节点.
1. 选择复制偏移量最大的节点(同步数据最多).
1. 选择 runId 最小的节点.
#### 读写分离
#### 定时任务
- 每 1s 每个 Sentinel 对其他 Sentinel 和 Redis 执行 ping,进行心跳检测.
- 每 2s 每个 Sentinel 通过 Master 的 Channel 交换信息(pub - sub).
- 每 10s 每个 Sentinel 对 Master 和 Slave 执行 info,目的是发现 Slave 节点、确定主从关系.

### 分布式集群(Cluster)
#### 拓扑图

![image](https://user-images.githubusercontent.com/26766909/67539510-f8f93900-f714-11e9-9d8d-08afdecff95a.png)

#### 通讯
##### 集中式
> 将集群元数据(节点信息、故障等等)几种存储在某个节点上.
- 优势
1. 元数据的更新读取具有很强的时效性,元数据修改立即更新
- 劣势
1. 数据集中存储
##### Gossip
![image](https://user-images.githubusercontent.com/26766909/67539546-16c69e00-f715-11e9-9891-1e81b6af624c.png)

- [Gossip 协议](https://www.jianshu.com/p/8279d6fd65bb)

#### 寻址分片
##### hash取模
- hash(key)%机器数量
- 问题
1. 机器宕机,造成数据丢失,数据读取失败
1. 伸缩性
##### 一致性hash
- ![image](https://user-images.githubusercontent.com/26766909/67539595-352c9980-f715-11e9-8e4a-9d9c04027785.png)

- 问题
1. 一致性哈希算法在节点太少时,容易因为节点分布不均匀而造成缓存热点的问题。
- 解决方案
- 可以通过引入虚拟节点机制解决:即对每一个节点计算多个 hash,每个计算结果位置都放置一个虚拟节点。这样就实现了数据的均匀分布,负载均衡。
##### hash槽
- CRC16(key)%16384
-
![image](https://user-images.githubusercontent.com/26766909/67539610-3fe72e80-f715-11e9-8e0d-ea58bc965795.png)






## 使用场景
### 热点数据
### 会话维持 session
### 分布式锁 SETNX
### 表缓存
### 消息队列 list
### 计数器 string





## 缓存设计
### 更新策略
- LRU、LFU、FIFO 算法自动清除:一致性最差,维护成本低.
- 超时自动清除(key expire):一致性较差,维护成本低.
- 主动更新:代码层面控制生命周期,一致性最好,维护成本高.
### 更新一致性
- 读请求:先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应.
- 写请求:先删除缓存,然后再更新数据库(避免大量地写、却又不经常读的数据导致缓存频繁更新).
### 缓存粒度
- 通用性:全量属性更好.
- 占用空间:部分属性更好.
- 代码维护成本.

### 缓存穿透
> 当大量的请求无命中缓存、直接请求到后端数据库(业务代码的 bug、或恶意攻击),同时后端数据库也没有查询到相应的记录、无法添加缓存.
这种状态会一直维持,流量一直打到存储层上,无法利用缓存、还会给存储层带来巨大压力.
>
#### 解决方案
1. 请求无法命中缓存、同时数据库记录为空时在缓存添加该 key 的空对象(设置过期时间),缺点是可能会在缓存中添加大量的空值键(比如遭到恶意攻击或爬虫),而且缓存层和存储层数据短期内不一致;
1. 使用布隆过滤器在缓存层前拦截非法请求、自动为空值添加黑名单(同时可能要为误判的记录添加白名单).但需要考虑布隆过滤器的维护(离线生成/ 实时生成).
### 缓存雪崩
> 缓存崩溃时请求会直接落到数据库上,很可能由于无法承受大量的并发请求而崩溃,此时如果只重启数据库,或因为缓存重启后没有数据,新的流量进来很快又会把数据库击倒
>
#### 出现后应对
- 事前:Redis 高可用,主从 + 哨兵,Redis Cluster,避免全盘崩溃.
- 事中:本地 ehcache 缓存 + hystrix 限流 & 降级,避免数据库承受太多压力.
- 事后:Redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据.
#### 请求过程
1. 用户请求先访问本地缓存,无命中后再访问 Redis,如果本地缓存和 Redis 都没有再查数据库,并把数据添加到本地缓存和 Redis;
1. 由于设置了限流,一段时间范围内超出的请求走降级处理(返回默认值,或给出友情提示).



21 changes: 21 additions & 0 deletions docs/database/数据库连接池.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
- 公众号和Github待发文章:[数据库:数据库连接池原理详解与自定义连接池实现](https://www.fangzhipeng.com/javainterview/2019/07/15/mysql-connector-pool.html)
- [基于JDBC的数据库连接池技术研究与应用](http://blog.itpub.net/9403012/viewspace-111794/)
- [数据库连接池技术详解](https://juejin.im/post/5b7944c6e51d4538c86cf195)

数据库连接本质就是一个 socket 的连接。数据库服务端还要维护一些缓存和用户权限信息之类的 所以占用了一些内存

连接池是维护的数据库连接的缓存,以便将来需要对数据库的请求时可以重用这些连接。为每个用户打开和维护数据库连接,尤其是对动态数据库驱动的网站应用程序的请求,既昂贵又浪费资源。**在连接池中,创建连接后,将其放置在池中,并再次使用它,因此不必建立新的连接。如果使用了所有连接,则会建立一个新连接并将其添加到池中。**连接池还减少了用户必须等待建立与数据库的连接的时间。

操作过数据库的朋友应该都知道数据库连接池这个概念,它几乎每天都在和我们打交道,但是你真的了解 **数据库连接池** 吗?

### 没有数据库连接池之前

我相信你一定听过这样一句话:**Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁**。








Loading