Ruby on rails 4 为什么即使memcached存储了结果,数据库仍然被命中?
我正在使用active record进行一些基本查询,并尝试使用将结果存储在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 “页面/索引”的存储和检索工作正常,但“页面/索引/网格项”仍然
@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