ruby-on-rails - 在 RoR 中缓存昂贵的查询结果

标签 ruby-on-rails ruby conventions

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

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

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

在数据库服务器本身上缓存结果集有点过分了,因为我实际上只关心从查询结果中收集的一些数据。{} 页面缓存是一种浪费,因为几个不同的页面都使用这些数据,并且都会缓存相同的内容,而只有其周围的 View 发生变化。

最佳答案

听起来你想要 Rails 缓存

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

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

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

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

关于ruby-on-rails - 在 RoR 中缓存昂贵的查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8620456/

相关文章:

ruby-on-rails - Rails 模型中关联、作用域、验证等的正确顺序是什么

c# - "using"命名空间声明中的语句位置

javascript - Ruby On Rails 3.1 - Assets 管道 - Assets 渲染两次

ruby-on-rails - current_user.present 和 if user_signed_in 有什么区别?

ruby-on-rails - 销毁后从重新创建用户模型创建数据库时出错

ruby-on-rails - 如何在我的 Nokogiri 文档中检索一组唯一的父节点?

ios - ios项目结构是否有任何最佳实践或约定

ruby-on-rails - 用于对象路由的 rails sha1 哈希?

sql - Rails - has_one 关系 : scopes for associated and non-associated objects

ruby-on-rails - 如何使此正则表达式规则不区分大小写