当前位置: 首页 > news >正文

PHP建立MySQL持久化连接(长连接)及mysql与mysqli扩展的区别

如果在 PHP 5.3 的版本以前想要创建MySQL的持久化连接(长连接),需要显式调用 pconnect 创建:

$con = mysql_pconnect($server['host'], $server['username'], $server['password']);
if (!($con === false)) {
if (mysql_select_db($server['database'], $con) === false) {echo('Could not select database: ' . mysql_error());continue;
}
// do something here……
}

从 PHP 5.3 开始, mysqli 扩展开始支持持久化连接,持久化连接已经在 PDO MYSQL 和 ext/mysql 中提供支持。

持久化连接的优势

持久化连接的目的在于重用客户端到服务器之间的连接, 而不是每次在需要的时候都重新建立一个连接。
由于持久化连接可以将已经建立的连接缓存起来,以备后续的使用, 所以省去了建立新的连接的开销, 因此可以带来性能上的提升

不像 mysql 扩展,mysqli 没有提供一个特殊的方法用于打开持久化连接。 如果 mysqli 打开一个持久化连接,需要在创建连接时,在host前面增加p:两个字符。

mysql 和 mysqli 扩展的区别如下:

持久链接建立方式,mysqli是在host前面增加“p:”两个字符;mysql使用mysql_pconnect函数;
mysqli 建立的持久链接,必须在mysqli_close之后,才能被下一个请求复用;mysql的长连接,可以立即被复用;
pdo 建立的持久链接,不必关闭,就能复用;
mysqli 建立持久链接时,会自动清理上一个会话变量、回滚事务、解锁表、释放锁等操作;而 mysql 扩展则不会(这点非常重要);
mysqli 判断是否为同一持久链接标识是 IP,PORT、USER、PASS、DBNAME、SOCKET;mysql 是 IP、PORT、USER、PASS、CLIENT_FLAGS;

持久化长连接的风险

使用持久化连接也会存在一些风险, 因为在缓存中的连接可能处于一种不可预测的状态。
例如,如果客户端未能正常关闭连接, 可能在这个连接上残留了对库表的锁, 那么当这个连接被其他请求重用的时候,这个连接还是处于 有锁的状态。
所以,如果要很好的使用持久化连接,那么要求代码在和数据库进行交互的时候, 确保做好清理工作,保证被缓存的连接是一个干净的,没有残留的状态。

mysqli 扩展的持久化连接提供了内建的清理处理代码。 mysqli 所做的清理工作包括:

回滚处于活动状态的事务
关闭并且删除临时表
对表解锁
重置会话变量
关闭预编译 SQL 语句(在PHP中经常发生)
关闭处理程序
释放通过 GET_LOCK() 获得的锁

这确保了将连接返回到连接池的时候, 它处于一种“干净”的状态,可以被其他客户端进程所使用。

mysqli 扩展 通过自动调用 C-API 函数 mysql_change_user() 来完成这个清理工作。

自动清理的特性有优点也有缺点:
优点是程序员不再需要担心附加的清理代码, 因为它们会自动调用。
然而缺点就是 性能 可能会 慢一点, 因为每次从连接池返回一个连接都需要执行这些清理代码。

这个自动清理的代码可以通过在编译 php 时定义
MYSQLI_NO_CHANGE_USER_ON_PCONNECT 来关闭。

注意: mysqli 扩展在使用 MySQL Native Driver 或 Mysql Client Library(libmysql)时都支持持久化连接。

为什么我的长连接不生效?

村长多说两句,相信很多小伙伴遇到过这个问题:

明明创建了 pconnect,show process_list 查看数据库链接,却发现长连接没有被复用,而是重新创建了一个,这是为啥呢?这得从PHP的运作模式说起。

一般 php 有2种运行模式, 一是作为 cgi 运行, 二是作为 apache 的模块运行:

作为 cgi 的时候 connect 跟 pconnect 没什么不同, 因为每次 cgi 进行运行结束后都会被销毁清理掉资源;
php 作为 apache 模块方式运行时, 可以使用到数据库持续连接, 但可能会存在潜在的问题;

说白了,如果你是 cgi 运行方式,pconnection 永远也不会生效

长连接最大的缺点就是万一一个用户锁死,当前进程就永久锁死了;假如你在apache里的设置是进程永不销毁的话就…
总之,尽量使用 mysql_connect,因为运行结束后会自动断开;再说了现在的机器性能都不差,不至于缺少那点儿创建销毁带来的内存开销。

最后编辑于:2025-02-05 20:59:54


喜欢的朋友记得点赞、收藏、关注哦!!!

相关文章:

PHP建立MySQL持久化连接(长连接)及mysql与mysqli扩展的区别

如果在 PHP 5.3 的版本以前想要创建MySQL的持久化连接(长连接),需要显式调用 pconnect 创建: $con mysql_pconnect($server[host], $server[username], $server[password]); if (!($con false)) { if (mysql_select_db($server[database], $con) fals…...

python爬虫系列课程2:如何下载Xpath Helper

python爬虫系列课程2:如何下载Xpath Helper 一、访问极简插件官网二、点击搜索按钮三、输入xpath并点击搜索四、点击推荐下载五、将下载下来的文件解压缩六、打开扩展程序界面七、将xpath.crx文件拖入扩展程序界面一、访问极简插件官网 极简插件官网地址:https://chrome.zzz…...

【Python项目】基于Python的Web漏洞挖掘系统

【Python项目】基于Python的Web漏洞挖掘系统 技术简介: 采用Python技术、MySQL数据库、Django框架、Scrapy爬虫等技术实现。 系统简介: Web漏洞挖掘系统是一个基于B/S架构的漏洞扫描平台,旨在通过自动化的方式对网站进行漏洞检测。系统主要功…...

多环境日志管理:使用Logback与Logstash集成实现高效日志处理

多环境日志管理:使用Logback与Logstash集成实现高效日志处理 在现代软件开发中,有效的日志管理是至关重要的。无论是调试问题、监控应用性能还是审计用户活动,良好的日志策略都能大大提高工作效率。本文将详细介绍如何配置Spring Boot项目以…...

idea连接gitee(使用idea远程兼容gitee)

文章目录 先登录你的gitee拿到你的邮箱找到idea的设置选择密码方式登录填写你的邮箱和密码登录成功 先登录你的gitee拿到你的邮箱 具体位置在gitee–>设置–>邮箱管理 找到idea的设置 选择密码方式登录 填写你的邮箱和密码 登录成功...

STM32 看门狗

目录 背景 独立看门狗(IWDG) 寄存器访问保护 窗口看门狗(WWDG) 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...

飞书API

extend目录下,API <?php // ---------------------------------------------------------------------- // | 飞书API // ---------------------------------------------------------------------- // | COPYRIGHT (C) 2021 http://www.jeoshi.com All rights reserved. …...

深入解析 Hydra 库:灵活强大的 Python 配置管理框架

深入解析 Hydra 库&#xff1a;灵活强大的 Python 配置管理框架 在机器学习、深度学习和复杂软件开发项目中&#xff0c;管理和维护大量的配置参数是一项具有挑战性的任务。传统的 argparse、json 或 yaml 方式虽然能管理部分配置&#xff0c;但随着项目规模的增长&#xff0c…...

【开源免费】基于Vue和SpringBoot的失物招领平台(附论文)

本文项目编号 T 243 &#xff0c;文末自助获取源码 \color{red}{T243&#xff0c;文末自助获取源码} T243&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal

三个IP 你的笔记本电脑中有三个IP&#xff1a;127.0.0.1、无线网 IP 和局域网 IP。 在不同的场景下&#xff0c;需要选用不同的 IP 地址&#xff0c;如下为各自的特点及适用场景&#xff1a; 127.0.0.1&#xff08;回环地址&#xff09; 特点 127.0.0.1 是一个特殊的 IP 地…...

测试WSS服务器

必须有域名&#xff0c;证书也是强制关联这个域名&#xff0c;阿里云、腾讯云、百度云都可以申请免费的证书&#xff0c;外网对应的主机要备案到域名 备案&#xff1a;是针域名下的主机备案&#xff0c;不备案的话&#xff0c;会强制断网 这个网站可以测试本地WSS连接 ​​​​…...

unity学习49:寻路网格链接 offMeshLinks, 以及传送门效果

目录 1 网格链接 offMeshLinks 功能入口 1.1 unity 2022之前 1.2 unity 2022之后 2 网格链接 offMeshLinks 功能设置 3 点击 offMeshLinks 功能里的bake 3.1 unity 2022之前 3.2 unity 2022之后 3.3 实测link 3.4 跳跃距离增大&#xff0c;可以实现轻功类的效果 4 …...

Web 开发中的 5 大跨域标签解析:如何安全地进行跨域请求与加载外部资源

在 Web 开发中,跨域(Cross-Origin)是指从一个源(协议、域名、端口)访问另一个源的资源。以下是5个常见的用于跨域操作的 HTML 标签,它们主要用于跨域请求或加载外部资源:1. <script> 标签 用途:最常用于进行跨域请求的标签,特别是在 JSONP 技术中。浏览器允许通…...

UMLS数据下载及访问

UMLS数据申请 这个直接在官网上申请即可&#xff0c;记得把地址填全&#xff0c;基本都会拿到lisence。 UMLS数据访问 UMLS的数据访问分为网页访问&#xff0c;API访问以及数据下载后的本地访问&#xff0c;网页访问&#xff0c;API访问按照官网的指示即可&#xff0c;这里主…...

23种设计模式 - 空对象模式

模式定义 空对象模式&#xff08;Null Object Pattern&#xff09;是一种行为型设计模式&#xff0c;通过用无操作的空对象替代null值&#xff0c;消除客户端对空值的检查&#xff0c;避免空指针异常。其核心是让空对象与真实对象实现相同接口&#xff0c;但空对象不执行实际逻…...

Redis三剑客解决方案

文章目录 缓存穿透缓存穿透的概念两种解决方案: 缓存雪崩缓存击穿 缓存穿透 缓存穿透的概念 每一次查询的 key 都不在 redis 中&#xff0c;数据库中也没有。 一般都是属于非法的请求&#xff0c;比如 id<0&#xff0c;比如可以在 API 入口做一些参数校验。 大量访问不存…...

大学本科教务系统设计方案,涵盖需求分析、架构设计、核心模块和技术实现要点

以下是大学本科教务系统的设计方案,涵盖需求分析、架构设计、核心模块和技术实现要点: 大学本科教务系统设计方案 一、需求分析 1. 核心用户角色 角色功能需求学生选课/退课、成绩查询、课表查看、学分统计、考试报名、学业预警教师成绩录入、课程大纲上传、教学进度管理、…...

Docker Mysql 数据迁移

查看启动命令目录映射 查看容器名称 docker ps查看容器的启动命令 docker inspect mysql8.0 |grep CreateCommand -A 20如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2 如果没…...

ubuntu22.04离线安装K8S

1. 准备离线安装包 参考教程离线包准备教程 2. 准备环境 2.1. 准备主机 主机名ip系统k8s-master192.168.38.128ubuntu22.04k8s-node192.168.38.131ubuntu22.04 2.2. 设置host 修改 /etc/hosts 文件&#xff0c;添加master和node节点&#xff0c;需要和主机名保持一致 2…...

微信小程序中将图片截图为正方形(自动居中)

没啥可说的&#xff0c;直接看代码吧&#xff08;邪恶的微信小程序和浏览器的还不一样&#xff09; //将用户图片自动剪切成正方形 const cutImgToSquare (imgPath: string) > {//ts-ignorewx.createSelectorQuery().select(#canvas).fields({ node: true, size: true }).…...

5分钟掌握HsMod:炉石传说终极优化插件完全指南

5分钟掌握HsMod&#xff1a;炉石传说终极优化插件完全指南 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 如果你是一名炉石传说玩家&#xff0c;是否曾为繁琐的开包过程而烦恼&#xff1f…...

向量数据库选型指南:从Chroma到Faiss,5大主流方案如何匹配你的大模型应用场景

1. 为什么大模型需要向量数据库&#xff1f; 当你用ChatGPT提问时&#xff0c;它为什么能理解你的问题并给出相关回答&#xff1f;这背后就藏着向量数据库的功劳。简单来说&#xff0c;大模型在处理文本、图像等数据时&#xff0c;会先把它们转换成高维向量&#xff08;可以理解…...

如何10分钟内搭建BepInEx游戏插件框架:完整入门指南

如何10分钟内搭建BepInEx游戏插件框架&#xff1a;完整入门指南 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一款功能强大的游戏插件框架&#xff0c;专为Unity Mono、…...

【Docker 27工业级批量部署实战手册】:20年运维专家亲授零失误容器集群上线SOP

第一章&#xff1a;Docker 27工业级批量部署的演进逻辑与SOP价值定位在超大规模容器化交付场景中&#xff0c;Docker 27&#xff08;即 Docker Engine v27.x 系列&#xff09;标志着从“单机实验型容器运行时”向“可审计、可回滚、可编排的工业级部署基座”的关键跃迁。其核心…...

2026年昆山钨钢裁切刀技术大比拼,哪家更强?

随着工业制造的不断进步&#xff0c;工业机械刀具在各个行业中的应用越来越广泛。特别是钨钢裁切刀&#xff0c;因其优异的耐磨性和高精度而备受青睐。本文将对比昆山久利制刀有限公司&#xff08;久利刀具&#xff09;与其他几家知名厂家的钨钢裁切刀&#xff0c;从多个维度进…...

从AI到抗量子:下一代金融基础设施正在发生什么变化?

在过去几年中,金融科技行业的讨论焦点,经历了几次明显的转移:从区块链性能,到Web3应用,再到AI与自动化。而当这些技术逐渐交叉,一个更底层的问题开始浮现:来的金融系统,应该建立在什么样的基础之上?这不仅是技术问题,更是结构问题。一、AI正在改变的,不只是效率,而是“决策方式…...

基于AWS Lex的云端智能客服系统设计与优化

1. 项目背景与核心价值去年接手公司客户服务系统升级时&#xff0c;我发现传统工单系统的响应延迟和人力成本问题日益突出。当时市面上成熟的SaaS客服工具要么功能过剩&#xff0c;要么定制性不足&#xff0c;于是萌生了自建云端智能客服的想法。这个项目从零开始完全基于云服务…...

5分钟搞定视频字幕提取:免费本地工具终极指南

5分钟搞定视频字幕提取&#xff1a;免费本地工具终极指南 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字幕内容提取。A…...

拆解精益车间的三大核心功能,精益车间如何解决在制品积压与生产周期长难题

在制造企业的车间里&#xff0c;有两个指标最让管理者头疼&#xff1a;一个是在制品积压——半成品堆成小山&#xff0c;占地方、压资金&#xff1b;另一个是生产周期长——订单下去迟迟出不来&#xff0c;客户天天催。这两个问题往往互为因果&#xff1a;在制品越多&#xff0…...

【技术实战篇】从OBD到EDR:汽车电子数据提取标准解读与实战案例拆解

1. OBD与EDR&#xff1a;汽车电子数据的双核心系统 第一次接触汽车电子数据提取时&#xff0c;我被各种专业术语搞得晕头转向。直到处理了十几起事故案件后才发现&#xff0c;OBD和EDR就像汽车的"黑匣子"&#xff0c;记录着车辆最真实的状态数据。先说说OBD接口&…...