要让thinkphp6稳定支撑1万并发请求,需从运行环境、数据库、缓存、异步解耦、横向扩展五层面协同优化:调优php(opcache、realpath缓存)、nginx(worker数、长连接)、关闭调试;mysql启用swoole连接池、读写分离、杜绝n+1;构建本地+redis多级缓存并预热;耗时操作全入队列(redis/swoole协程);最后通过nginx负载均衡实现无状态集群部署。

要让 ThinkPHP6 稳定支撑 1 万并发请求,不能只靠单点优化,得从运行环境、数据库、缓存、异步解耦、横向扩展五个层面协同发力。实测中,从默认约 100 QPS 提升到 10000+ QPS,关键在于层层拆解瓶颈并针对性加固。
一、PHP与Web服务器底层压测前必调
这是所有上层优化的前提,没调好再好的代码也扛不住。
-
启用并配置 OPcache:在 php.ini 中确保
opcache.enable=1,内存设为opcache.memory_consumption=512(单位 MB),并开启脚本校验opcache.validate_timestamps=0(上线后可关,压测时建议关) -
提升 realpath 缓存:设
realpath_cache_size=8192K,避免频繁路径解析开销 -
Nginx 进程与连接数对齐:worker_processes 设为
auto;每个 worker_connections 至少 10240;开启长连接keepalive_timeout 65;关闭日志写入或切到 buffer 模式(access_log off或buffer=64k) -
关闭调试与开发模式:.env 中强制
APP_DEBUG=false、APP_TRACE=false,禁用异常页面渲染
二、数据库抗压三板斧:连接池 + 读写分离 + 查询瘦身
1 万并发下,MySQL 很容易成为第一个崩掉的环节,必须主动分流和减负。
-
启用 Swoole 连接池:在
config/database.php的 MySQL 连接配置中加入'pool_size' => 200(根据机器 CPU 核数 × 20~30 设置),配合'pool_get_timeout' => 3防止卡死 -
强制主从分离:配置
readwrite_type为random或weight,把列表页、详情页等读操作自动路由到从库;写操作走主库 -
杜绝 N+1 和全表扫描:关联查询统一用
withJoin()预加载;分页改用游标分页cursor();所有高频 WHERE 字段加索引,避免SELECT *
三、缓存体系必须多级联动,不只靠 Redis
单靠 Redis 缓存,在 1 万并发下仍可能被击穿或打满带宽,需本地+远程+预热三层兜底。
-
本地缓存兜底:用
store('file')或store('apcu')存放高频但变化少的数据(如配置项、状态码映射),避免每次穿透到 Redis -
Redis 做主力缓存:配置连接为
persistent=true(长连接),超时设为timeout=3;热点数据 key 加命名空间,如user:profile:1001 -
定时预热 + 缓存雪崩防护:用
php think schedule:run启动定时任务,在低峰期(如凌晨 2 点)执行Cache::remember('hot_list', 7200, [...]);过期时间加随机偏移(如 ±300 秒)
四、耗时操作必须进队列,主线程只做快速响应
用户请求进来后,200ms 内必须返回,其余动作全部丢给队列异步执行。
-
Redis 队列起步快、够用:.env 中设
QUEUE_CONNECTION=redis,启动常驻监听器php think queue:work --daemon --sleep=1 --max-jobs=0 -
核心流程分级投递:登录成功后发短信 → 投
sms队列;下单成功后发通知 → 投notify队列;日志归档 → 投log队列;不同队列可用不同 Worker 并发消费 -
高吞吐场景上 Swoole 协程消费者:用
Swoole\Coroutine\Redis替代阻塞式 Redis 客户端,单进程可并发处理数百任务,比传统 CLI Worker 效率高 3~5 倍
五、单机到集群:Nginx 负载均衡 + 服务无状态化
1 万并发很难靠一台机器扛住,必须水平扩展,且保证每台应用服务器完全无状态。
-
Nginx 做七层负载:upstream 配置至少 3 台 TP6 应用服务器,开启
ip_hash或least_conn;后端健康检查加max_fails=3 fail_timeout=30s -
会话与缓存外置:session 存 Redis(
session.type=redis),不要用 file;所有临时文件(如上传、生成图)走对象存储(OSS/COS)或共享 NFS -
静态资源彻底剥离:CSS/JS/图片全部走 CDN,Nginx 配置
location ~* \.(js|css|png|jpg|gif)$直接返回,不进 PHP
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











