【发布时间】:2012-09-11 08:50:12
【问题描述】:
如何缓存我的所有查询。
第一个请求:
@user = User.all
第二次请求
@user = User.all # Cached
有什么有用的插件可以做到这一点吗?
我处于生产模式。我似乎看不到任何缓存短语来确认我的 Rails 应用程序正在缓存。
【问题讨论】:
标签: mysql ruby-on-rails caching memcached
如何缓存我的所有查询。
第一个请求:
@user = User.all
第二次请求
@user = User.all # Cached
有什么有用的插件可以做到这一点吗?
我处于生产模式。我似乎看不到任何缓存短语来确认我的 Rails 应用程序正在缓存。
【问题讨论】:
标签: mysql ruby-on-rails caching memcached
在您的 config/environments/production.rb 中
config.action_controller.perform_caching = true
在开发和测试时默认禁用缓存,在生产时启用。
查询缓存是 Rails 的一项功能,它缓存每个查询返回的结果集,这样如果 Rails 针对该请求再次遇到相同的查询,它将使用缓存的结果集,而不是再次对数据库运行查询。
例如:
class UsersController < ActionController def index # Run a find query @users = User.all ... # Run the same query again @users = User.all end end
第二次对数据库运行相同的查询时,它实际上并不会命中数据库。第一次从查询返回的结果存储在查询缓存中(在内存中),第二次从内存中提取。
在您的控制台上检查它
用户负载 (?ms) SELECT
User.* FROMUser在 ?ms 内完成 200 次 OK(查看次数:?ms | ActiveRecord:?ms)
您可以将其与第一次加载和第二次加载进行比较。
您可以使用来自https://github.com/mperham/dalli 的 Dalli gem 将您的缓存存储到 memcached 服务器。
【讨论】: