yii 2.0.54高并发优化核心是规避瓶颈、释放资源、减少阻塞:采用nginx+php-fpm组合,关闭yii_debug与调试工具栏,启用opcache和schemacache,会话存redis,高频接口加etag,订单/库存等写操作用乐观锁防冲突。

Web服务器层:用Nginx做高效前置代理
Apache 在高并发下易因线程/进程模型导致连接堆积;纯 Nginx 又对 PHP-FPM 长耗时请求(如文件上传、表单提交)缺乏容错缓冲。Yii 2.0.54 推荐采用 Nginx + PHP-FPM(非 Apache) 组合,而非 Nginx+Apache 混合——后者增加复杂度且无实质收益。
- Nginx 配置中启用
fastcgi_buffering off或合理调大fastcgi_buffers,避免大响应体阻塞 worker - 为上传接口单独设置长超时:
fastcgi_read_timeout 300,并配合client_max_body_size 100M - 静态资源(CSS/JS/图片)全部交由 Nginx 直接服务,禁用 Yii 路由拦截
PHP与运行环境:精简开销、复用连接
Yii 2.0.54 默认开启调试模式(YII_DEBUG = true)和日志冗余记录,生产环境必须关闭。
- 确保
YII_ENV = 'prod',关闭调试工具栏(yii\debug\Module)、禁用 trace 级日志 - 数据库连接复用:在
config/db.php中启用'enableSchemaCache' => true,并配置 Redis 或 APCu 缓存表结构 - PHP 启用 OPcache(推荐 opcache.enable=1, opcache.memory_consumption=256),并关闭
opcache.validate_timestamps(上线后手动重置)
Yii 应用层:按需加载、异步解耦
高并发本质是“单位时间请求多”,优化核心是缩短单请求生命周期,把可延后、可并行的操作剥离出去。
- 移除控制器中不必要的
Yii::$app->user->identity主动调用,改用Yii::$app->user->getIsGuest()快速判断 - 邮件、短信、日志上报等 I/O 密集操作,改用 yii2-queue + Redis 队列异步执行
- 用户会话存储从默认的 files 改为 Redis:
'class' => 'yii\redis\Session',避免文件锁争用 - 对高频只读接口(如商品列表、配置项),添加 ETag 或 Last-Modified 响应头,推动客户端缓存
数据库与乐观锁:防写冲突、减锁等待
并发写入(如订单创建、库存扣减)是典型瓶颈点。Yii 2.0.54 原生支持乐观锁,比数据库行锁更轻量。
- 在数据表加
version(INT UNSIGNED NOT NULL DEFAULT 0)字段,Model 中重载optimisticLock()返回'version' - 前端表单提交时携带当前 version 值;保存时捕获
StaleObjectException,返回友好提示或自动重试(最多 2 次) - 避免在事务中做 HTTP 请求、文件写入等外部依赖操作,防止事务长时间持锁











