使用rails的异步缓存过期

Top*_*opo 5 ruby-on-rails cache-control delayed-job

我的应用程序使用"常规"缓存清理程序(ActionController :: Caching :: Sweeper的子类)来缓存缓存(主要是片段).

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

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

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

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

Win*_*eld 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
Run Code Online (Sandbox Code Playgroud)