Dog -Piling:缓存失效遇上大量访问

Dog-Piling是指当缓存中的数据失效时,遇到大量的请求,此时大量的请求涌向数据库,导则数据库超负荷。(数据获取的时间大于服务器需要响应的用户的时间)

Dog-Piling与cache stampede和thundering herd同义。

一种避免dog-piling效应的旧解决方案:

首先定义以下变量:

my $STALE_REFRESH = 1;
my $STALE_CREATED = 2;
my $EXPIRY = 300;
my $GENERATION_TIME = 30;


sub memcGet{
    my($this,$key,$db_get_method,$db_method_args,$expiry,$generation_time) = @_;
$expiry = $EXPIRY unless defined $expiry;
$generation_time = $GENERATION unless defined $generation_time;
return $this->{memc}->get($key) unless $expiry;

my $full_expiry = $expiry + $generation_time*2;

my $stale_key = "$key:stale";
my $value = $this->{memc}->get($key);
my $stale_value = $this->{memc}->get($stale_key);
unless(defined $stale_value){
   $this->{memc}-set($stale_key,$STALE_REFRESH,$generation_time);
print "SETTING stale_value";
$value = undef;
}

unless(defined $value){
   $value = $db_get_method->($this,$db_method_args);
$this->{memc}->set($key,$value,$full_expiry);
$this->{memc}->set($stale_key,$STALE_VALUE,$expiry);
}
return $value;
}

下面是一些详细介绍Dog-Piling的文章。

Strategy: Break Up The Memcache Dog Pile

http://highscalability.com/blog/2009/8/7/strategy-break-up-the-memcache-dog-pile.html

MintCache:

http://taoyh163.blog.163.com/blog/static/19580356200812564641602/

Dog-pile Effect and How to Avoid it with Ruby on Rails memcache-client Patch:

http://kovyrin.net/2008/03/10/dog-pile-effect-and-how-to-avoid-it-with-ruby-on-rails-memcache-client-patch/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值