本文档介绍火山引擎移动解析(HTTPDNS)客户端 SDK 的解析记录缓存机制。您可以对缓存机制进行自定义配置。
SDK 初始化时,SDK 按照预解析域名列表发起批量预解析。预解析完成之后,SDK 会把解析记录写入客户端缓存。
SDK 在连接到另一个网络时,也会按照预解析域名列表发起批量解析。
App 调用 SDK 的解析方法发起域名解析请求时,如果 SDK 在客户端缓存找到了匹配的解析记录,SDK 就可以直接返回该记录。这样就可以降低移动解析 HTTPDNS 的解析请求耗时。
说明
您可以通过以下方法设置预解析域名列表:
IHttpDnsDepend
接口的 getPreloadDomains 方法:在初始化之前设置预解析域名列表。HttpDNS
类的 setPreloadHosts 方法:在初始化之后设置预解析域名列表。说明
您可以通过以下方法设置 SDK 在连接到另一个网络时,是否会按照预解析域名列表发起批量解析。
如果 SDK 以 HTTPDNS 服务端的解析结果优先,解析过程中的缓存机制如下。
如上图所示,App 调用允许查询缓存的解析方法时:
说明
SDK 默认允许使用过期的解析记录,但不是无限制使用。SDK 只会使用处于过期容忍时间内的解析记录。在默认情况下,过期容忍时间为 60 秒,即 SDK 只会使用过期之后 60 秒内的解析记录。
说明
SDK 在查询来自 Local DNS 的缓存时,无论您是否设置了过期容忍时间,SDK 都不会使用缓存中过期的解析记录。
说明
SDK 会在后台继续等待解析结果。如果在解析请求超时前(默认是 15 秒),HTTPDNS 服务端或 Local DNS 返回了解析结果,SDK 会把解析结果写入客户端缓存。
在以 HTTPDNS 解析结果优先的解析过程中,等待解析结果超时时间与解析请求超时时间的区别如下:
超时时间类型 | 描述 | 设置方法 |
---|---|---|
等待解析结果超时时间 | 等待解析结果超时时间是从SDK 发送解析请求开始,到 SDK 停止等待解析结果的时间。
| 默认的等待解析结果超时时间是 5 秒。 |
解析请求超时时间 | SDK 返回解析结果之后,还没有返回结果的解析请求还能继续在后台运行。解析请求超时时间是从 SDK 返回解析结果开始,到 SDK 停止等待在后台运行的解析请求返回解析结果的时间。 如果 SDK 在解析请求超时时间内收到解析结果,则 SDK 会把解析结果写入本地缓存。 | 默认的请求超时时间是 15 秒。 |
以 Local DNS 解析结果优先的解析过程与以 HTTPDNS 解析结果优先的解析过程基本类似,主要区别在于 SDK 会首先查询来自 Local DNS 的解析结果。本文不再重复描述。
如下图所示,SDK 提供了自动刷新机制,可以保证缓存中解析记录总是有效的。这样,App 调用 SDK 发起解析请求时,SDK 可以返回缓存中的解析记录,从而降低 SDK 获取解析结果的时延。
解析记录是存在有效期(TTL)的。SDK 将解析记录写入客户端缓存之后,如果解析记录过期,您可以通过设置过期容忍时间继续使用过期的解析记录。过期容忍时间可以提高缓存的命中率,从而降低 SDK 发送解析请求的耗时。
说明
例如,您的 SDK 使用了默认设置。SDK 向 HTTPDNS 服务端发送解析请求,获得了一条解析记录。该解析记录的有效期(TTL)是 20 秒。SDK 会把该解析记录写入客户端缓存。SDK 获得解析记录 20 秒后,该解析记录过期。此时,该解析记录还处于过期容忍时间。SDK 获得解析记录 80 秒后,该解析记录超过了过期容忍时间。
SDK 会根据以下逻辑刷新解析记录:
说明