HTTPDNS如何配置来减少解析次数

为了减少HTTPDNS的解析次数,从而降低开销,可以通过调整缓存策略来实现。以下是具体的配置步骤:

1.启用并配置本地缓存

  • 在初始化HTTPDNS服务时,通过设置setEnableCacheIp(true)来启用本地缓存功能。这允许客户端在内存中存储最近解析过的域名IP信息,从而避免重复请求。

  • 示例代码

InitConfig.Builder()
    .setEnableCacheIp(true)
new InitConfig.Builder()
    .setEnableCacheIp(true);
说明

2.2.1版本新增的方法。调用本方法,从本地持久化缓存中加载记录到内存缓存中时,会将已经过期的本地缓存记录清除。

2.自定义缓存TTL时间

  • 利用configCacheTtlChanger(ttlChanger)方法来自定义缓存的有效期(TTL)。合理设置TTL值可以有效控制缓存更新频率,进而减少不必要的DNS查询。

  • 示例代码:

InitConfig.Builder().configCacheTtlChanger { host, requestIpType, ttl ->
    if (TextUtils.equals(host, ${指定域名})) {
        ttl * 10
    } else ttl
}
new InitConfig.Builder().configCacheTtlChanger(new CacheTtlChanger() {
    @Override
    public int changeCacheTtl(String host, RequestIpType requestIpType, int ttl) {
        if (TextUtils.equals(host,"${指定域名}")) {
            return ttl * 10;
        }
        return ttl;
    }
});
说明

2.3.0版本新增的方法。

3.预解析热点域名

  • 对于频繁访问的域名,可以在应用启动初期就进行预解析,并将结果保存到缓存中。这样在后续的实际业务请求中可以直接使用已缓存的数据,而无需再次发起DNS查询。

  • 示例代码:

 var preResolveList: MutableList<String> = mutableListOf()
 preResolveList.add(${指定域名})
 val httpdns = httpdns=HttpDns.getService(context,ACCOUNT_ID, SECRET_KEY)
 httpdns?.setPreResolveHosts(preResolveList)
HttpDnsService httpdns = HttpDns.getService(context, ACCOUNT_ID, SECRET_KEY);
ArrayList<String> preResolveHosts = new ArrayList<>();
preResolveHosts.add("${指定域名}");
httpdns.setPreResolveHosts(preResolveHosts);

4.配置固定IP的域名列表

  • 如果某些域名的IP地址相对稳定,可以将其添加到固定IP列表中。这样做有助于优化SDK内部逻辑,进一步减少不必要的域名解析操作。

  • 示例代码:

var hostListWithFixedIp: MutableList<String> = mutableListOf()
hostListWithFixedIp.add(${指定域名})
val config = InitConfig.Builder()
    .configHostWithFixedIp(hostListWithFixedIp)
    .build()
HttpDns.init(accountID, config)
ArrayList<String> hostListWithFixedIp = new ArrayList<>();
hostListWithFixedIp.add("${指定域名}");
InitConfig config = new InitConfig.Builder()
    .configHostWithFixedIp(hostListWithFixedIp)
    .build();
HttpDns.init(accountID, config);   
说明

上述提到的一些高级特性可能需要特定版本以上的HTTPDNS SDK支持,请确保您使用的SDK版本不低于2.3.0

适用于

  • HTTPDNS