缓存中的所有型号的表
-
11-07-2019 - |
题
我需要缓存(和到期)中的所有模型在表中。
例如,如果我有一个名为货币的模式,我只有小于10种可能的货币。因此,这将是很好有:
class Currency < ActiveRecord::Base
cache_all(:expire_in => 10.minutes)
end
,使得
Currency.all
Currency.find_by_name("USD")
不应该打的DB。
你觉得这可能是一个好办法?
另外,如果你相信它会更好地使用不是由DB备份的模式,请对此进行评论。请注意,我想有一个AR-风格关联。
解决方案
由于数据集是如此之小,可能是最好的事情是它缓存在本地内存。有几个方法可以做到这一点,一个是使用记忆化像我在这里展示。然而这不是最有效的,因为它会存储在单独的高速缓存的方法all
和find_by_name
方法,即使它们是相同的对象。
另一种方法是重新定义方法手动缓存对象。这样的事情。
class Currency < ActiveRecord::Base
def self.all
@all_cache ||= super.map(&:freeze) # freeze so you don't modify the cached objects
end
def self.find_by_name(name)
all.detect { |c| c.name.to_s.downcase == name.to_s.downcase }
end
def self.flush_all_cache
@all_cache = nil
end
end
有可能会来处理这给你一个插件,但我还没有在所有看着这一点。
不隶属于 StackOverflow