Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 为什么即使memcached存储了结果,数据库仍然被命中?_Ruby On Rails 4_Activerecord_Memcached_Dalli - Fatal编程技术网

Ruby on rails 4 为什么即使memcached存储了结果,数据库仍然被命中?

Ruby on rails 4 为什么即使memcached存储了结果,数据库仍然被命中?,ruby-on-rails-4,activerecord,memcached,dalli,Ruby On Rails 4,Activerecord,Memcached,Dalli,我正在使用active record进行一些基本查询,并尝试使用将结果存储在memcached中 我有以下代码: @page = Rails.cache.fetch 'pages/index' do Page.find_by_name('index') end @grid_items = Rails.cache.fetch 'pages/index/grid_items' do @page.grid_items end “页面/索引”的存储和检索工作正常,但“页面/索引/网格项”仍然

我正在使用active record进行一些基本查询,并尝试使用将结果存储在memcached中

我有以下代码:

@page = Rails.cache.fetch 'pages/index' do
  Page.find_by_name('index')
end

@grid_items = Rails.cache.fetch 'pages/index/grid_items' do
  @page.grid_items
end
“页面/索引”的存储和检索工作正常,但“页面/索引/网格项”仍然会导致数据库查询。my localhost的以下输出显示了这一点:

Cache read: pages/index
Cache fetch_hit: pages/index
Cache read: pages/index/grid_items
Cache fetch_hit: pages/index/grid_items
GridItem Load (0.7ms)  SELECT "grid_items".* FROM "grid_items" WHERE (status = 't') AND (page_id = 1)  ORDER BY "grid_items"."position" ASC

我尝试过使用“包含”而不是“连接”,但运气不好。我还检查了控制台中Rails.cache.fetch的结果,它返回了正确的数据。

答案是我需要确保ActiveRecord确实命中了数据库。我缓存的是一个查询对象,而不是结果

为了触发数据库调用,我最终使用以下命令将查询转换为数组:

@grid_items = Rails.cache.fetch 'pages/index/grid_items' do
  @page.grid_items.live.to_a
end