Top*_*opo 5 ruby-on-rails cache-control delayed-job
我的应用程序使用"常规"缓存清理程序(ActionController :: Caching :: Sweeper的子类)来缓存缓存(主要是片段).
现在,缓存过期会将应用程序锁定几秒钟,对客户所感知的性能产生负面影响.
能够异步地过期缓存会很棒,例如使用delayed_job(应用程序当前托管在heroku上).
不幸的是,简单地将handle_asynchronously添加到清扫器内的缓存过期功能似乎不起作用.
是否可以使用delayed_job异步使缓存片段到期?如果是这样,那么最好的做法是什么?
您需要手动使缓存过期。由于您使用的是 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)