【问题标题】:caching expensive query results in RoR在 RoR 中缓存昂贵的查询结果
【发布时间】:2011-12-23 20:44:42
【问题描述】:

所以我有这个昂贵的数据库查询,它的结果不会经常改变。

问题是,在 95% 的时间里,我真正关心的唯一事情是 50 kb 的原始数据字符串。

使用页面缓存来缓存昂贵且经常使用的查询的结果是否完全违反“RoR 方式”TM?

在 db 服务器本身上缓存结果集有点矫枉过正,因为我真的只关心我从查询结果中收集到的少量数据。{} 页面缓存很浪费,因为几个不同的页面都使用了这些数据,并且都缓存了相同的东西,只是周围的视图发生了变化。

【问题讨论】:

  • 我不会太担心违背“RoR 方式”。如果您有解决问题的方法,并且满意,那就去做吧。 DHH 不会来你家偷你的键盘 ;) 话虽如此,在这种情况下,弗雷德里克的答案可能就是你要找的。​​span>
  • 好的。我知道如何使用缓存(我们使用的是 memcache),但我不确定它什么时候合适,什么时候不合适。我通常只看到完全渲染的 html/javascript 被缓存,所以不确定缓存原始数据是否是“坏事”。我听到很多“争取它”,所以我会假设没有任何教条反对它。谢谢大家:)

标签: ruby-on-rails ruby conventions


【解决方案1】:

听起来你想要 Rails 缓存

Rails.cache.fetch('cache_key') do
  # calculations here
end

这要么执行计算并将块的返回值填充到缓存中,要么从缓存中读取值。

您可以显式地过期(Rails.cache.delete)或设置过期时间或使用分代缓存键。

您可以使用多种缓存存储,但其中一种更常见的是 memcsched。有关于如何配置缓存存储的详细信息here

【讨论】:

  • 完美。在仪表板应用程序中缓存了一些昂贵的查询,现在它既好又快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2011-03-21
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多