Laravel,PHP 如何使用数据库连接池提高性能 | Laravel China 社区


本站和网页 https://learnku.com/articles/20793 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Laravel,PHP 如何使用数据库连接池提高性能 | Laravel China 社区
Laravel
话题列表
社区 Wiki
优质外文
招聘求职
Laravel 实战教程
社区文档
登录
注册
Laravel
首页
Laravel
Go
PHP
Vue.js
Python
Java
MySQL
Rust
LK
Elasticsearch
F2E 前端
Server
程序员
Database
DevTools
Computer Science
手机开发
AdonisJS
社区
Wiki
教程
Laravel 实战教程首页
《L01 Laravel 教程 - Web 开发实战入门》
《L02 Laravel 教程 - Web 开发实战进阶》
《L03 Laravel 教程 - 实战构架 API 服务器》
《L04 Laravel 教程 - 微信小程序从零到发布》
《L05 Laravel 教程 - 电商实战》
《L06 Laravel 教程 - 电商进阶》
《LX1 Laravel / PHP 扩展包视频教程》
《LX2 PHP 扩展包实战教程 - 从入门到发布》
《L07 Laravel 教程 - Laravel TDD 测试实战》
《LX3 Laravel 性能优化入门》
《LX4 Laravel / PHP 五分钟视频》
文档
社区文档首页
《Laravel 中文文档》
《Laravel 速查表》
《PHP 代码简洁之道》
《Laravel 编码技巧》
《Dcat Admin 中文文档》
《Laravel Nova 中文文档》
《Lumen 中文文档》
《Dingo API 中文文档》
《 Laravel 项目开发规范》
《构建 Laravel 开发环境》
登录
注册
微信登录
Laravel,PHP 如何使用数据库连接池提高性能
38
50
32
louislivi 的个人博客
8068
32
创建于 4年前
更新于 3年前
数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
需要
PHP 7.0+
SWOOLE 2.1+
SMProxy
Laravel
MySQL
1.安装swoole
pecl install swoole
2.安装SMProxy
(推荐)直接下载最新发行版的 PHAR 文件,解压即用:
https://github.com/louislivi/smproxy/relea...
下载前两个压缩包中的一个
或者使用 Git 切换任意版本:
git clone https://github.com/louislivi/smproxy.gitcomposer install --no-dev # 如果你想贡献你的代码,请不要使用 --no-dev 参数。
3.配置数据库连接池
假设MySQL数据库账号为root 密码为654321 库名为 test
编辑SMProxy 的conf/database.json文件
"database": {
"account": {
"root": {
"user": "root",//数据库账号
"password": "654321"//数据库密码
},
"serverInfo": {
"server1": {
"write": {//写库
"host": "127.0.0.1",//数据库地址
"port": 3306,
"timeout": 0.5,//连接超时时间
"flag": 0,
"account": "root"
},
"read": {//读库,没有可删掉read列 或填写与写库数据一致内容
"host": "127.0.0.1",
"port": 3306,
"timeout": 0.5,
"flag": 0,
"account": "root"
},
"databases": {
"test": {
"serverInfo": "server1",
"startConns": "swoole_cpu_num()*10",
"maxSpareConns": "swoole_cpu_num()*10",
"maxSpareExp": 3600,
"maxConns": "swoole_cpu_num()*20",
"charset": "utf-8"
随后配置SMProxy 的账号密码 在conf/server.json文件
"server": {
"user": "SMProxy", //SMProxy账号
"password": "SMProxy", //SMProxy密码
"charset": "utf8mb4",
"host": "0.0.0.0",
"port": "3366",
"mode": "SWOOLE_PROCESS",
"sock_type": "SWOOLE_SOCK_TCP",
"logs": {
"open":true,
"config": {
"system": {
"log_path": "ROOT/logs",
"log_file": "system.log",
"format": "Y/m/d"
},
"mysql": {
"log_path": "ROOT/logs",
"log_file": "mysql.log",
"format": "Y/m/d"
},
"swoole": {
"worker_num": "swoole_cpu_num()",
"max_coro_num": 6000,
"open_tcp_nodelay": true,
"daemonize": true,
"heartbeat_check_interval": 60,
"heartbeat_idle_time": 600,
"reload_async": true,
"log_file": "ROOT/logs/swoole.log",
"pid_file": "ROOT/logs/pid/server.pid"
},
"swoole_client_setting": {
"package_max_length": 16777216
},
"swoole_client_sock_setting": {
"sock_type": "SWOOLE_SOCK_TCP"
启动SMProxy服务
./SMProxy start
配置Laravel数据库信息
.env文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3366
DB_DATABASE=test
DB_USERNAME=SMProxy
DB_PASSWORD=SMProxy
测试Laravel是否能够正常连接数据库
出现错误请检查SMProxy日志
配置完成
SMProxy 文档
文档:https://smproxy.louislivi.com
若被墙请访问:https://smproxy.gitee.louislivi.com
laravel
mysql
数据库连接池
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 3年前 自动加精
举报
louislivi
73 声望
暂无个人描述~
38 人点赞
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
推荐文章:
更多推荐...
博客
钱付了,订单还是未支付,用户炸了!——聊聊如何防止支付掉单!
27
18
2个月前
翻译
如何在 Laravel 中创建一个简单的事件流?
19
12
3个月前
博客
🎈 Slow Admin - 使用Laravel和Amis快速构建你的后台
25
35
3个月前
博客
用Go实现支持多种协议的抓包工具——Shermie-Proxy
22
33
5个月前
翻译
Laravel 代码重构:使用 Services, Events, Jobs, Actions 来重构控制器方法
60
22
6个月前
博客
使用 Laravel Filament 极速搭建美观大方的后台面板
20
44
6个月前
讨论数量: 32
排序:
时间
投票
半人间
课程读者
176 声望
真的有用吗?
4年前
评论
评论
举报
louislivi
73 声望
@半人间 能够有效降低数据库压力
4年前
评论
评论
举报
wanghang
课程读者
26 声望
打算用在生成环境上,想请问下有什么不适用的地方没有,害怕真用上了,如果遇到坑就没法解决了
3年前
评论
评论
举报
黑将军
课程读者
85 声望
院长 @ 非正常程序猿研究中心
能上生产环境吗?
3年前
评论
评论
举报
Double-Jin
318 声望
@黑将军 专为swoole写的框架都是用连接池的,生产上没问题,点进去看看我那个es的im demo
3年前
评论
评论
举报
zbsbjb
0 声望
@Double-Jin 请问为什么我按照这个配置去部署会提示以下错误:
*SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) (SQL: select from admin_permissions)**
navicat 用 3366 端口和配置的账号去连接数据库是没问题的,能正常查出数据
3年前
评论
评论
举报
louislivi
73 声望
@zbsbjb 可能是mysql 授权问题 可以百度Access denied for user 'root'@'localhost' 寻找问题原因,你可以先修改为127.0.0.1 试试
3年前
评论
评论
举报
louislivi
73 声望
@黑将军 可以的
3年前
评论
评论
举报
zbsbjb
0 声望
@louislivi
环境:php:7.3.4 swoole:4.3.5 SMProxy:1.2.8
server.json 配置的账号:smproxy
database.json配置的账号:root
navicat和 mysql -usmproxy -p -P3366 -h 127.0.0.1都是能通过smproxy账号连接到数据库的
ps:在navicat使用某个数据库时会弹出"Lost connection to MySQL server during query"的错误,之后就能正常使用了
.env 配置连接的账号smproxy 提示smproxy这个账号 Access denied for user 'smproxy'@'localhost'
修改后:
.env 配置连接的账号root 成功连接mysql
原本不是通过SMProxy监听的3366端口和server.json配置的账号密码连接后获取到代理返回的mysql连接吗,为何这里的sever.json配置的账号没有生效而需要使用root账号去连接数据库呢?sever.json配置的账号难道也需要去mysql创建账号,还是我漏了哪个步骤?谢谢
3年前
评论
评论
举报
louislivi
73 声望
@zbsbjb 仔细阅读文档 有两个账号 一个是smproxy的 一个是mysql的
3年前
评论
评论
举报
黑将军
课程读者
85 声望
院长 @ 非正常程序猿研究中心
为什么我在Mac下测试总卡在这儿呢?
3年前
评论
评论
举报
louislivi
73 声望
@黑将军
看日志,把日志贴出来
3年前
评论
评论
举报
黑将军
课程读者
85 声望
院长 @ 非正常程序猿研究中心
@louislivi 没有输出日志,已经在github上提issue了
3年前
评论
评论
举报
liuhuanguang
0 声望
怎么配置达到最优
3年前
评论
评论
举报
sprite
0 声望
smproxy只有一组帐号密码,可以进行读写分离。
但如果想业务层只读,看起来是不好实现的?
2年前
评论
评论
举报
huangxu
见习助教
60 声望
2020-08-23 11:08:01 [warning] SMProxy@Connection 127.0.0.1:3306 waiting timeout, timeout=0.5 (/www/wwwroot/SMProxy/src/MysqlPool/MySQLPool.php:284). 这是没连上? 服务器本地mysql8.0
2年前
评论
评论
举报
huangxu
见习助教
60 声望
好了,搞了半天,数据库名称搞错了
2年前
评论
评论
举报
JTVR
1 声望
我一直都是出现这个错误,请问是哪里搞错了?我也是按照上边文档来的,我数据库账号和数据库密码分别是root和654321,然后就数据库地址不一样,其他完全一样的,运行的时候就出现这错误了
2年前
评论
评论
举报
echo0
课程读者
0 声望
本机上有个数据库,其他服务器上还有个数据库,本地配置可以访问,但是其他服务器上的数据库怎么配置访问,最新的版本支持swoole4.6吗?
1年前
评论
评论
举报
xiaobaiyihao
21 声望
搭建成功,但是感觉比直连慢呀
1年前
评论
评论
huangxu
1年前
同感,只是高并发的情况下才能体验到
举报
zhangshiyang
0 声望
@louisliv 搭建成功了,启动smproxy之后可以连接 ,但是如果连接成功后放置一段时间再次刷新请求,就会一直连接不上,只有再次重启smproxy才可以连接,这是什么问题
1年前
评论
评论
huangxu
1年前
启动长链还是?
zhangshiyang
(作者)
1年前
@huangxu 啥意思?我就是按照文档搭建完了,启动smproxy,使用框架写了一个接口里面连接数据库,通过网址get请求读取一条数据,没有问题,此时多次刷新也没有问题,然后保持这个页面不动,其实就是没有继续请求了,过一段时间大概十几分钟,再次刷新这个get请求的url,就一直连接不上,最后报错time-out了
zhangshiyang
(作者)
1年前
@huangxu 不是长链接,就是普通的一个请求接口
huangxu
1年前
@zhangshiyang 连接数据库设置为长链接试试,或者设置心跳检查配置
zhangshiyang
(作者)
1年前
@huangxu server.json文件中 "heartbeat_check_interval": 10, "heartbeat_idle_time": 60,这两个配置么,本来就有默认的配置,我把时间改短了一下 ,还是不行
huangxu
1年前
@zhangshiyang 链接不上看报什么错误
zhangshiyang
(作者)
1年前
@huangxu 日志文件里面没有报错
zhangshiyang
(作者)
1年前
@huangxu 我大概知道为啥出现这个问题了,但是还是不清楚解决方法。之前隔一段时间连接不上的时候我连的是另外一台阿里云服务器上的数据库,后面我改成搭建连接池的虚拟机上的本地数据库之后,没有出现间隔一段时间就连接不上的问题
举报
mengxianfan
0 声望
100qps 感觉作用不大
8个月前
评论
评论
huangxu
8个月前
扩容,堆硬件
举报
讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
<a href="javascript:;" class="mr-2 ui popover text-mute" data-html="黏贴或拖拽图片至输入框内皆可上传图片">
<a href="javascript:;" class="mr-2 ui popover text-mute hide-on-mobile" data-html="支持除了 H1~H6 以外的GitHub 兼容 Markdown">
支持 MD
帮助
关注本文
评论
louislivi
未填写
文章
粉丝
14
喜欢
251
收藏
166
排名:232
访问:3.9 万
关注
私信
所有博文
阅读模式
文章归档
1 篇
2020 年 6 月
1 篇
2019 年 12 月
3 篇
2019 年 11 月
1 篇
2019 年 7 月
1 篇
2019 年 6 月
1 篇
2018 年 12 月
1 篇
2018 年 11 月
最新文章
最受欢迎
2年前
利用 mitmproxy 实现抖音 Cookie,设备 ID 获取 (一)
3年前
Spring Boot 最简单整合 Shiro+JWT 方式
3年前
Spring boot 如何快速的配置多个 Redis 数据源
3年前
springboot 多数据源,最简单的整合方式
3年前
SMProxy 1.3.0 发布 !
209
SMProxy,让你的数据库操作快三倍!
38
Laravel,PHP 如何使用数据库连接池提高性能
springboot 多数据源,最简单的整合方式
Spring Boot 最简单整合 Shiro+JWT 方式
SMProxy 1.3.0 发布 !
博客标签
redis
php
laravel
jwt
database
swoole
swoole-laradb-pool
mysql
连接池
数据库连接池
Spring Boot
多数据源
jta
shiro
抖音
python
社区赞助商
成为赞助商
社区赞助商
成为赞助商
关于 LearnKu
LearnKu 是终身编程者的修道场
做最专业、严肃的技术论坛
LearnKu 诞生的故事
资源推荐
《社区使用指南》
《文档撰写指南》
《LearnKu 社区规范》
《提问的智慧》
服务提供商
其他信息
成为版主
所有测验
联系站长(反馈建议)
粤ICP备18099781号-6
粤公网安备 44030502004330号
违法和不良信息举报
由 Summer 设计和编码 ❤
请登录
提交
忘记密码?
or
注册
第三方账号登录
微信登录
GitHub 登录
内容举报
匿名举报,为防止滥用,仅管理员可见举报者。
我要举报该,理由是:
垃圾广告:恶意灌水、广告、推广等内容
无意义内容:测试、灌水、文不对题、消极内容、文章品质太差等
违规内容:色情、暴利、血腥、敏感信息等
不友善内容:人身攻击、挑衅辱骂、恶意行为
科学上网:翻墙、VPN、Shadowsocks,政策风险,会被关站!
不懂提问:提问太随意,需要再做一遍《提问的智慧》测验
随意提问:提问没有发布在社区问答分类下
排版混乱:没有合理使用 Markdown 编写文章,未使用代码高亮
内容结构混乱:逻辑不清晰,内容混乱,难以阅读
标题随意:标题党、标题不释义
尊重版权:分享付费课程、破解软件(付费),侵犯作者劳动成果
其他理由:请补充说明
举报
取消