开门的第一分钟是缓存的冰点:全部玩家的第一次背包查询、第一次排行查询全部打穿到数据库,冷缓存的数据库在洪峰面前最早跪下。开服预热把热门数据在开门前装载进缓存,第一波请求打在热缓存上。
---开服预热:热门数据的装载
setontimerex(97, 0)
function Warmup.run()
local jobs = {
{ name = "排行榜", fn = Warmup.ranks },
{ name = "商店货架", fn = Warmup.shops },
{ name = "传送点", fn = Warmup.waypoints },
{ name = "预创角", fn = Warmup.preRoles },
}
for _, job in ipairs(jobs) do
local ok, err = pcall(job.fn)
Ops.log(("预热[%s] %s"):format(
job.name, ok and "完成" or "失败:" .. tostring(err)))
end
end
---排行榜的预热:开门前的首屏数据
function Warmup.ranks()
Cache.put("rank_level", DB.query(
"SELECT name, level FROM roles " ..
"ORDER BY level DESC LIMIT 50"))
end
预热的清单四件套:排行榜的首屏(开门后第一个被点开的界面)、商店的货架(新手买药的高频)、传送点的配置(满地图的传送查询)、预创角的名册(开门的准入校验)。装载走 pcall 的隔离:一项的失败不拖累其余,失败的名目进日志由人工补载。预热的时机在开门前的 5 分钟:太早装载的数据会被开门前的临期变更作废,太晚来不及完成。
---预热的校验:缓存命中率的开门验证
function Warmup.verify()
-- 模拟开门的首波查询,验证命中
local hit = 0
local total = 0
for _, q in ipairs(Warmup.probeQueries()) do
total = total + 1
if Cache.get(q) then hit = hit + 1 end
end
local rate = hit / total
Ops.log(("预热命中率 %.0f%%"):format(rate * 100))
return rate >= 0.9
end
预热的校验用探针查询模拟开门的首波:热门的键逐个探一遍,命中率 90% 以上才放行开门——冷缓存的敞口在开门前量化,不达标即补载重验。预热的清单随版本演进:新玩法的首屏数据进清单,清单的维护与界面的热度数据联动(界面打开率的前十名就是预热的后备名单)。缓存的过期与预热错峰:预热的缓存设较长的新鲜期,开门的半小时内不做过期淘汰,缓存的策略在开门窗口期单独放宽。
开门首分钟的数据库查询量与历史的对照,预热生效的标志是查询量降一个数量级;缓存的命中率分钟级曲线,冷启动的爬坡期被预热压缩到接近零。
预热曾经只装了数据没建索引,缓存的对象结构在首查时才初始化,预热的完整性包含结构。预热的时机曾经太早,开门前的紧急配置变更让缓存与配置不一致,预热挪到配置冻结之后。探针的清单曾经与真实查询脱节,验证的命中率虚高,探针从真实的埋点导出。
预热的清单与界面的热度数据联动,清单的迭代有数据依据。预热任务的失败不阻断开门,失败项的补载有人工的通道。开门后的前 5 分钟数据库的查询量进开服复盘,预热的效果用数字归档。
本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 行会招人的门槛是双刃剑:无门槛的行会人满为患却乌合之众,高门槛的行会精英云集却关死了普通玩家的归属感。分层准入的目…
设计初衷 副本钥匙是副本经济的闸门:钥匙太贱,副本门口排大队、产出洪水冲垮经济;钥匙太贵,副本冷清、核心玩法没人体验。密钥平…
设计初衷 节日活动是在线峰值的引爆点:春节回城烟花一放,比奇主城同屏人数冲上日常的三倍,卡顿、掉线、排队接踵而至。峰值预案的…
底层原理 单线程的 Lua 没有并发,却有"重入":玩家的一次操作还没走完,同一次点击的第二个触发又进来了(双击、连点、宏)…
底层原理 一条业务链路往往穿越四五个函数:入口触发 → 校验 → 结算 → 通知。玩家对象、来源渠道、事务单号这些"全程都要…
业务场景 拜师系统的人数规则:一师最多三徒,出师空位才可再收。申请侧痛点:师父一次收到十几份申请无从挑起,口头答应后被人抢先…