等要慢不少。如何提高速度呢?尤其是对查询同样的结果。
以下是一段最简单的cache代码:
CODE:
package Net::DNS::Resolver;
my %cache;
sub search {
my ($self, @args) = @_;
if ($cache{@args}) {
print "cached\n";
return $cache{@args};
} else {
print "no cache...\n";
$cache{@args} = $self->SUPER::search(@args)
}
}
1;
use Net::DNS::Resolver;
my $dns = Net::DNS::Resolver->new;
for(0...10) {
$dns->search('www.hzqbbc.com', 'A');
}执行这段程序,会显示如下结果:QUOTE:
no cache...很显然,第二个循环执行时查询已经是返回缓存过的信息了。这样就可以提高速度,尤其是对大量
cached
cached
cached
cached
cached
cached
cached
cached
cached
cached
重复的查询有极大的提高作用。过去的APF server就是利用类似的原理cache dns结果的。
注意的是,这里重复定义了Net::DNS::Resolver,并覆盖了父类的search方法。但实际它还是
要调用父类的search方法,只不过增加了简单的cache机制。
此cache有一个大的问题,就是没有timeout/expire的机制,一旦cache就永远不会刷新,因此对
于长期运行的daemon程序,必须设置一个超时的机制,超过了时间就重新查询一次,以保持cache
的更新。
From: http://www.extmail.org/forum/read.php?tid=1230&fpage=2