最直接查看当前dns记录ttl值的方法是用dig example.com +noall +answer命令,输出第二列数字即为生效的缓存时间(秒),如300表示5分钟、86400表示24小时;该ttl决定各级缓存(浏览器、系统、递归dns)保留旧记录的时长,修改后未生效主因是缓存未过期。

怎么看当前记录的TTL值
最直接的方法是用 dig 命令查权威响应中的 TTL 字段:
- dig example.com +noall +answer —— 显示 A 记录及当前生效的 TTL(单位秒)
- dig www.example.com @ns1.example-dns.com +noall +answer —— 指定权威 DNS 服务器查询,避开缓存干扰
- 注意看输出里第二列数字,比如 300 就代表该记录缓存 5 分钟,86400 就是一整天
为什么改了记录还看不到新IP
根本原因不是“没生效”,而是各级缓存还在用旧值。TTL 决定了这个缓存能撑多久:
- 浏览器和操作系统会尊重 DNS 返回的 TTL,自动缓存对应时长
- 本地递归 DNS(如运营商 DNS、114.114.114.114)也会按 TTL 缓存,全球成千上万台服务器都可能存着老记录
- 如果之前设的是 86400,哪怕你刚改完,别人访问时仍可能拿到 24 小时前的 IP
怎么加快验证或缩短等待时间
TTL 是提前设定的,不能临时“清掉”别人的缓存,但可以主动绕过或缩短影响范围:
- 排查时优先用 dig +trace 看完整解析链路,确认哪一级返回了旧 IP
- 在本地测试可换用公共 DNS,比如 dig example.com @8.8.8.8 或 @1.1.1.1,它们缓存策略更激进,有时比 ISP DNS 更快刷新
- 若尚未上线,建议提前几天把 TTL 调低(如改成 300),等旧缓存自然过期后再改记录,这样切换时几乎无感
Linux系统自身缓存也要检查
除了网络侧缓存,Linux 本地也可能有残留解析结果:
- systemd-resolved:运行 sudo systemd-resolve --flush-caches
- dnsmasq:重启服务 sudo systemctl restart dnsmasq
- /etc/hosts 文件若有手动条目,会完全跳过 DNS,记得检查是否误写
- 应用层(如 Java、Node.js)有时自带 DNS 缓存,需查对应运行时配置











