假设我有一个包含2个固定记录的系统表'categories'。用户将不被允许删除这两个,但可能希望添加他们自己的扩展名列表。我需要能够在特定时间拉出“花园”类别,例如在创建花园项目时。
返回花园实例的类属性读取器可以完成这项工作,但我想知道如何通过缓存来改进它?
我相信memoization只适用于每个过程,这里几乎没有意义。我希望它设置一次(可能是第一次访问它或在应用程序启动时)并保留在缓存中以备将来使用。
示例设置:
class Project < ActiveRecord::Base
belongs_to :category
end
class Category < SystemTable
cattr_reader :garden
def self.garden
@@garden ||= self.find_by_name('garden')
end
end
答案 0 :(得分:2)
下面显示的方法如何,在加载Category
类时将检索一次园区实例:
class Category < SystemTable
GARDEN = self.find_by_name('garden')
end
现在,只要您需要花园类别,就可以使用Category::GARDEN
。
答案 1 :(得分:1)
Interlock是一个与memcached一起使用的插件,它将自动缓存使用id直接“查找”所做的任何实例。同样,您可以绕过互锁,只需手动缓存memcached中的对象。类级变量是一个肮脏且可能导致错误的解决方案(我甚至不确定它是否有效)。有关在网络上安装和使用memcached / memcache-client的大量信息。