使用rails的异步缓存过期

时间:2011-04-24 12:39:02

标签: ruby-on-rails delayed-job cache-control

我的应用程序使用“常规”缓存清理程序(ActionController :: Caching :: Sweeper的子类)来缓存缓存(主要是碎片)。

现在,缓存过期会将应用程序锁定几秒钟,对客户所感知的性能产生负面影响。

能够异步过期缓存会很棒,例如使用delayed_job(应用程序当前托管在heroku上)。

不幸的是,简单地将handle_asynchronously添加到清扫器内的缓存过期功能似乎不起作用。

是否可以使用delayed_job异步过期缓存片段?如果是这样,那么最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

您需要手动使缓存过期。因为您正在使用memcached,所以您只需要生成缓存密钥所需的任何数据。

然后,您可以编写延迟作业以直接访问缓存并删除所需的密钥。

以下是Resque的示例清扫工具:

class UserMemcachedSweeper < ActionController::Caching::Sweeper
  observe User

  def after_save(user)
    Resque.enqueue UserCacheExpiry, user.id
  end
end

class UserCacheExpiry
  @queue = :cache_expiry

  def self.perform(user_id)
    Rails.cache.delete("/users/#{user_id}")
  end
end