代码之家  ›  专栏  ›  技术社区  ›  tsdbrown

Rails:如何缓存系统表数据

  •  2
  • tsdbrown  · 技术社区  · 14 年前

    假设我有一个系统表“类别”,其中有两个固定记录。不允许用户删除这2个,但可能希望添加自己的列表以扩展其列表。我需要能够在某些时候,例如在创建一个花园项目时,把“花园”这一类别拉出来。

    返回garden实例的类属性阅读器可以完成这项工作,但我想知道如何通过缓存来改进这一点?

    我相信记忆化只适用于每个过程,这在这里几乎毫无意义。我希望它设置一次(可能是第一次访问或在应用程序启动时),并保留在缓存中以备将来使用。

    示例设置:

    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 回复  |  直到 14 年前
        1
  •  2
  •   John Topley    14 年前

    下面显示的方法如何,当 Category 类已加载:

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

    现在,只要你需要花园,你就可以使用 Category::GARDEN .

        2
  •  1
  •   Max Williams    14 年前

    interlock是一个与memcached一起工作的插件,它会自动缓存由直接的“find”使用id创建的任何实例。同样,您可以绕过interlock,只需手动将对象缓存在memcached中。类级变量是一个脏的并且可能导致错误的解决方案(我甚至不确定它是否有效)。在网上安装和使用memcached/memcache客户机的信息很多。