由于我们的应用程序中的数据库转换越来越耗时,我们已经开始使用memcached来减少传递给MySQL的查询量.
总而言之,它工作正常,真的可以节省大量时间.
但是,由于缓存是"无声地出现"作为一种解决方法来为应用程序提供更多果汁,我们的许多模型现在包含如下代码:
def self.all_cached Rails.cache.fetch('object_name') { find( :all, :include => [associations]) } end
随着填充和刷新缓存在应用程序中的几个类中发生,这变得越来越痛苦.
现在,我想知道是否有更好的方法来抽象memcached逻辑,使其更强大,更容易在所有需要的模型中使用?
我正在考虑使用某种memcached模块,它包含在所有需要的模块中.
但在玩之前,我想:让我们先问专家:-)
谢谢
马特
我建议检查现有的插件,两个大的插件是cache_fu和缓存钱.对于您希望使用缓存中的关联加载模型的用例,我强烈建议您尝试使用Cache Money,它几乎会自动执行:
def parent < ActiveRecord::Base has_many children end def child < ActiveRecord::Base index :parent_id end #now you can do the following without ever hitting the DB parents = Parent.find :all parents.each{ |p| p.children }
使用Cache Money真正的巨大胜利是,当您扩展到数据库复制延迟成为问题时,通过缓存写入可以保存您的屁股.对于Rails而言,这一点尤为重要,因为复制延迟很容易导致500个错误,而且通常是您不想拥有的噩梦.
是的,我认为将memcached模块包含在您需要的所有模型中是最佳解决方案.你的思路很棒:)