更改ActiveRecord语句缓存默认Rails

时间:2016-07-21 20:29:14

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 activerecord

我怀疑我的应用程序有内存泄漏,我读到有关rails会自动管理最后1,000次查询执行的缓存。几乎我的应用程序中的每个查询都是唯一且非常繁重并且包含许多返回的行。

那么有没有办法可以改变语句缓存的默认值?
(我正在使用postgres DB)

2 个答案:

答案 0 :(得分:3)

它在数据库适配器级别处理。可以通过Postgrsql适配器中的statement_limit配置它。

您需要在database.yml

中添加它
production:
adapter: postgresql
statement_limit: 200

关注this链接获取官方文档。可以选择完全禁用语句缓存。

production:
adapter: postgresql
prepared_statements: false

其次,有一个选项可以清除postgres适配器中的statement cache。有一个名为clear_cache!的方法可以在Postgres adaptor

找到

Here是对同一事项的非常好的讨论。您将在以下链接中找到所有详细信息

答案 1 :(得分:-1)

Rails有许多内置的缓存策略,但它们都不是基于查询数量本身。缓存(如果有限)基于文件大小到期时间

如果您的应用程序使用内存存储,则默认文件大小限制为32Mb。这可以通过在配置中添加以下行来更改:

config.cache_store = :memory_store, { size: 64.megabytes }

可以找到关于此的官方文档以及许多其他形式的缓存here

鉴于您明显需要这种密集缓存,我建议您也查看其他各种选项 - 例如fragment cacheingRussian doll caching - 因为这可能是一个远远少于SQL的资源密集型策略单独缓存。