先说结论
1.2 万个站不可能每次请求都查库渲染。站群的性能靠三件事:门户缓存、sitemap 缓存、站点不缓存。
三层缓存策略
| 层 | 内容 | 时长 | 失效 |
|---|---|---|---|
| 门户页 | 首页 / 列表 / 地区页 | 180 秒 | 改平台设置、保存站点时主动清 |
| sitemap | 分片文件 | 1 小时 | 过期自然重建 |
| 城市站页面 | 不落 HTML 缓存 | — | 内容与留言状态实时 |
为什么城市站不缓存:页面数量太多,缓存命中率低,维护成本高于收益;而且内容改动要立即生效。
批量脚本要幂等
三个核心脚本:
php tools/seed_tenants.php <db> --apply # 租户与产品初始化
php tools/import_streets.php <db> <pcas.json> --apply # 街道字典
php tools/generate_sites.php <db> --apply # 批量铺站
规矩:
- 默认 dry-run,必须显式
--apply才写库 - 重复执行不产生重复数据(按 slug/tenant 判断)
- 每次执行输出"新建 / 跳过 / 失败"数量
一次铺一个省
后台选省份 → 选主打词池 → 设置每站内容篇数 → 生成。一个省几百到几千个站,通常几分钟内完成。
运维清单
- 每天:备份
citycms.db+static/upload/ - 每周:看一次收录、清理过期缓存
- 每月:VACUUM 数据库、抽查 3 个站的内容质量
- 上线/改版:按"上线检查清单"逐条过(robots、泛解析、证书、404)