防止多个数据库调用(从内存中读取)

时间:2019-06-28 17:48:50

标签: ruby ruby-on-rails-5.2

我有一个带有产品表的数据库。该表只有7个项目,并且希望能够将它们全部存储在内存中而不是数据库中,但是我仍然希望能够使用活动记录类型推断。 find_by,first,last,.where(一些查询参数)。

在带有Postgres 11的rails 5.2中有可能吗?

我正在阅读有关sqlite3内存的信息,但不确定这是否是最好的用法。我也不想将整个应用切换到sqlite。

3 个答案:

答案 0 :(得分:1)

懒惰的方式:

config / application.rb

module YourApp
  class Application < Rails::Application
    def things
      @things ||= Thing.all 
    end
  end
end

Rails.application.things.detect { |thing| thing.name == "Cool Name" }

请注意,您的关联仍将从数据库中加载。

答案 1 :(得分:0)

如果products表中只有很少的行,则不必担心要打数据库来获取它们。有很多避免不必要的数据库查询的方法,但是我们不建议您在不了解关系以及在应用程序中如何使用它们的情况下,不要将数据库用于此模型。如果您不需要产品的关系数据模型或mvc,则可以使用常量数组,并且正如Max在注释中提到的那样,可以在常规Array上使用Enumerable方法,例如:

Product.by_name('sneakers')
# or 
Product.by_name(:sneakers)

现在您可以做

Product.by_names([:racquets, :sneakers])

或一组名称:

<Button 
  label="" 
  icon="pi pi-cog"   
  className="cogIcon"  
  onClick={(e) => this.setState({visibleRight:true})} 
  style={{marginTop:'.25em', marginRight:'.25em'} } 
/> 

答案 2 :(得分:0)

Rails官方文档提供了low level caching上的详细信息,听起来似乎可行

您可以设置静态密钥名称和较长的到期时间