我的应用程序使用“常规”缓存清理程序(ActionController :: Caching :: Sweeper的子类)来缓存缓存(主要是碎片)。
现在,缓存过期会将应用程序锁定几秒钟,对客户所感知的性能产生负面影响。
能够异步过期缓存会很棒,例如使用delayed_job(应用程序当前托管在heroku上)。
不幸的是,简单地将handle_asynchronously添加到清扫器内的缓存过期功能似乎不起作用。
是否可以使用delayed_job异步过期缓存片段?如果是这样,那么最佳做法是什么?
答案 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