Ruby on rails 在Rails片段缓存工作的情况下,为什么SELECT语句出现在缓存片段内部的我的日志中?

Ruby on rails 在Rails片段缓存工作的情况下,为什么SELECT语句出现在缓存片段内部的我的日志中?,ruby-on-rails,caching,memcached,fragment-caching,Ruby On Rails,Caching,Memcached,Fragment Caching,我刚刚在Heroku上使用Memcacheer和dalli在我的网站上安装了memcached。我已经将我的主页包装在一个片段缓存块中。在我的日志中,我可以看到片段被正确缓存和读取,并且我已经发现负载测试的结果有了很大的改进。但我想知道为什么我仍然看到所有这些模型查找发生。我的理解是,我应该能够完全避免访问数据库。我日志中的“Country Load”语句是否表示从缓存加载模型?或者我可以通过改变缓存方式来避免它们 谢谢你的帮助 2013-04-03T22:48:03+00:00 app[web

我刚刚在Heroku上使用Memcacheer和dalli在我的网站上安装了memcached。我已经将我的主页包装在一个片段缓存块中。在我的日志中,我可以看到片段被正确缓存和读取,并且我已经发现负载测试的结果有了很大的改进。但我想知道为什么我仍然看到所有这些模型查找发生。我的理解是,我应该能够完全避免访问数据库。我日志中的“Country Load”语句是否表示从缓存加载模型?或者我可以通过改变缓存方式来避免它们

谢谢你的帮助

2013-04-03T22:48:03+00:00 app[web.1]: Read fragment views/home (15.4ms)
2013-04-03T22:48:03+00:00 app[web.1]:   Rendered shared/_home.html (18.8ms)
2013-04-03T22:48:03+00:00 app[web.1]:   Rendered cities/index.html within layouts/application (51.6ms)
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (9.7ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'united states' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (5.0ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'france' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (4.1ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'spain' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (4.3ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'united kingdom' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.4ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'brazil' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.5ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'china' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.0ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'germany' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (2.8ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'argentina' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (12.9ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'japan' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (2.9ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'italy' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.6ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'canada' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.3ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'thailand' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.2ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'colombia' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.6ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'south korea' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (10.7ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'sweden' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]:   Country Load (3.0ms)  SELECT "countries".* FROM "countries" WHERE "countries"."name" = 'singapore' LIMIT 1
2013-04-03T22:48:03+00:00 app[web.1]: Completed 200 OK in 743ms (Views: 359.6ms | ActiveRecord: 382.2ms)

视图中的片段缓存不会捕获布局-是否有显示国家的页眉或页脚元素?您也可以将它们包装到另一个片段缓存中。

您是否可以从控制器和视图中提供一些代码?看起来您是正确的。我忘了我在布局中做了一些愚蠢的DB调用。但我现在也缓存了这些调用。谢谢你的提示!是的,这种情况经常发生。还要注意过滤器之前的情况。