生效时间由什么决定
每条域名记录都带一个生效时间字段,权威服务器给出原始值,越往下游的缓存这个值只会递减。用户拿到的结果可能来自浏览器、操作系统、内网解析器或公共解析器中的任意一层,所以『改了记录不生效』通常不是没改成功,而是某一层缓存还没过期。排查的正确顺序是先从权威往下逐级核对:权威有了新值,再去看各级缓存里还剩多久。否定结果同样会被缓存,这就是为什么删掉记录后仍可能『查不到』一段时间。
基本信息
| 字段含义 | 记录在缓存中的可存活秒数,权威给出原始值并逐级递减 |
|---|---|
| 观察位置 | 完整查询输出的应答段,每条记录都带该字段 |
| 否定缓存 | 域名不存在或类型缺失的结果同样会被缓存,时长由区域参数决定 |
| 本机缓存 | 操作系统与浏览器各自持有缓存,命令行工具可能不走同样的缓存 |
| 标准流程 | 变更前先把生效时间调小,等旧值过期后再切换,事后调回较大值 |
逐级核对顺序
| 层级 | 查询对象 | 判断要点 |
|---|---|---|
| 权威 | 该域权威服务器 | 是否已有新值,以及原始生效时间是多少 |
| 内网解析器 | 内网递归服务器 | 是否仍在缓存旧值,剩余时间还有多久 |
| 公共解析器 | 公共递归服务器 | 对外部用户而言何时生效 |
| 操作系统 | 本机解析配置与缓存 | 是否命中本机缓存导致结果陈旧 |
| 浏览器与应用 | 自带缓存与预取 | 是否绕过系统解析直接使用旧结果 |
典型使用场景
- 域名切换:迁移前后确认各级缓存的状态与剩余时间
- 删除记录后仍可解析:确认是否处于否定缓存有效期内
- 跨地域生效差异:不同地区用户看到新旧值不一,核对各自解析路径
- 回滚决策:确认回滚后的记录何时能被全部用户看到
- 变更窗口规划:通过生效时间控制切换的平滑程度
逐级核对
逐级核对
dig +noall +answer example.com @ns1.example.com # 权威:新值与原始生效时间
dig +noall +answer example.com @10.0.0.53 # 内网递归:可能仍是旧值
dig +noall +answer example.com @8.8.8.8 # 公共递归
dig +noall +answer example.com # 本机视角
ipconfig /displaydns | head -30 # Windows:查看本机缓存与剩余时间
ipconfig /flushdns # Windows:清空本机缓存后重测现象与结论
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 权威已是新值,用户仍看到旧值 | 中间缓存未过期 | 等待过期或联系缓存方清理 |
| 刚删除记录就查不到 | 否定缓存仍在有效期 | 属正常现象,等待其自然过期 |
| 同一区域不同用户结果不同 | 各自缓存与解析路径不同 | 按用户实际路径逐级核对 |
| 本机查得到、程序查不到 | 程序使用了自己的缓存或代理 | 检查程序侧解析配置与代理设置 |
| 改了生效时间却不见变化 | 变更只改了记录值没改字段 | 确认变更内容与查询对象是否一致 |
标准做法是提前一个旧的生效时间窗口把字段调小,等旧值自然过期后再切走,切换完成后再调回较大值以降低解析压力。
同一条记录在不同解析器的剩余时间各不相同,判断『还要等多久』必须按具体解析器分别看,不能只看一处。
长期保留很短的生效时间会显著增加解析请求量,切换完成后记得恢复,否则高峰期容易触发上游限速。