ruby-on-rails - Rails 片段缓存 : would 100K+ fragments degrade performance?

标签 ruby-on-rails ruby-on-rails-3 caching ruby-on-rails-4 fragment-caching

我有一个包含大量数据的网站,我正在所有页面上进行“俄罗斯娃娃”缓存,如下所示:

# articles.html.haml
- cache "list of articles", expires_in: 15.minutes do
  = render partial: "article", collection: @articles

# _article.html.haml
- cache article do
  = article.body
  = render partial: "comment", collection: article.comments

# _comment.html.haml
- cache comment do
  = comment.body

这将创建 数十万 的片段。

1./tmp/cache 目录中有这么多片段文件会降低性能吗?

2. 旧的fragment自动过期,rail会自动删除吗?

附注。该站点驻留在具有 4GB 内存的单个 Ubuntu 服务器上。它没有使用 memcached 作为缓存存储,只是使用 Rails 开箱即用的基于标准文件的实现。

最佳答案

在某些时候,您必须问自己一个问题,缓存命中是否仍然比生成片段成本更低。如果答案是 (这可以进行基准测试),与未缓存的情况相比,这仍然可以提高性能。在物理(盘片)硬盘驱动器上存储数十万个缓存片段的情况下,我会非常警惕 I/O 瓶颈。如果这成为一个问题,您可以限制缓存策略的深度以减少文件数量。但是,请再次进行基准测试。命中率在这里是一个非常重要的统计数据,因为在这种特定情况下,高命中率将限制 I/O。

如果性能让您担心,还可以查看片段过期的频率。在您的特定情况下,每次发表评论时,“文章列表”都会失效。您目前每 15 分钟过期一次,但如果您希望输出保持一致,实际上应该在放置或编辑评论或文章后立即过期。如果您的文章列表每分钟有多个评论,那么您甚至可以在此处缓存单个评论是绝对正确的。如果 I/O 成为问题,您可以随时添加一些 RAM 并开始使用 memcached(或 redis,就此而言)。

但是,因为您有多层缓存,所以除了对父“文章列表”片段的点击之外,您可能完全没问题,只需对文件系统进行几次点击。

关于ruby-on-rails - Rails 片段缓存 : would 100K+ fragments degrade performance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258439/

相关文章:

ruby-on-rails - 为不活动的 Ruby on Rails 发送自动推送通知

ruby-on-rails - 为 nil :NilClass 设计 Rspec 未定义方法 `env'

ruby-on-rails - 使用 rails 和 apache 设置内容类型标题

ruby-on-rails - 错误无法加载此类文件 -- user_agent/browsers/playstation (LoadError)

java - 用于部署 Web 应用程序的 Infinispan 独特缓存管理器

html - 网站无法在移动设备上正确调整大小

ruby-on-rails - 使用vestal_versions的版本关联?

ruby-on-rails - validate_presence_of 不会产生 'can' t be Blank' 错误

caching - WP7 HttpWebRequest 没有缓存

http - 如何设置nginx仅在修改时传输静态文件