Rails:如何缓存系统表数据

时间:2010-09-22 09:55:11

标签: ruby-on-rails caching

假设我有一个包含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

2 个答案:

答案 0 :(得分:2)

下面显示的方法如何,在加载Category类时将检索一次园区实例:

class Category < SystemTable 
  GARDEN = self.find_by_name('garden')
end

现在,只要您需要花园类别,就可以使用Category::GARDEN

答案 1 :(得分:1)

Interlock是一个与memcached一起使用的插件,它将自动缓存使用id直接“查找”所做的任何实例。同样,您可以绕过互锁,只需手动缓存memcached中的对象。类级变量是一个肮脏且可能导致错误的解决方案(我甚至不确定它是否有效)。有关在网络上安装和使用memcached / memcache-client的大量信息。