【问题标题】:Rails application performance enhancement doubtRails 应用性能提升疑问
【发布时间】:2011-04-22 15:25:15
【问题描述】:

我正在 Rails 中开发一个应用程序,其中我有一个包含静态数据的表,这些静态数据大部分是只读的,并且很少会非常非常更新。

但是同一个查询会对该表执行多次(该查询不涉及任何其他表)。

为了避免重做这项工作,是否可以通过代码实现一些缓存机制?

如果是这样,实现它的最佳技术是什么?

我打算有一个 GLOBAL 散列变量,主键作为散列键,值作为查询的结果。

  1. 这种技术有什么缺点吗???

  2. 我可以看到的一件事是,当表更新时,需要重新启动服务器。

  3. 有更好的方法吗?

谢谢

【问题讨论】:

    标签: ruby-on-rails database performance caching optimization


    【解决方案1】:
    1. 是的,你重做一些已经存在并且运行良好的东西。

    2. 嗯,不明白你为什么这么认为

    3. 当然,是的:

    您的选择或多或少:

    • 内置:memory store

    • 需要一些设置:memcached

    • 替代键/值存储:redishttp://redis.io/

    看看这里:http://railslab.newrelic.com/scaling-rails

    【讨论】:

    • Memcached 是!!!我已经听过很多次了,但真的没有费力去了解它是.
    【解决方案2】:

    您可以使用Rails.cache - 当您需要刷新缓存时,只需将密钥过期?

    【讨论】:

      【解决方案3】:

      动态数据最简单的方法是使用 Rails 自己的片段缓存。要过期,请使用清扫器,它是在模型更改时调用的观察者,它将使缓存过期。 See the Rails guide on caching 获取有关片段缓存和清扫器的帮助。

      本指南唯一没有涵盖的内容非常明显,即您需要使用全局密钥片段在密钥字符串中包含您的记录 ID。点赞:<% cache( "foo_stuff_#{@foo.id}" ) do %>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-06
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多