【问题标题】:What caching strategy would best suit this problem?什么缓存策略最适合这个问题?
【发布时间】:2008-11-18 11:21:37
【问题描述】:

首先,让我说我对 Rails 很陌生,只使用了几天。

我的第一个应用程序与传统应用程序略有不同:在我的一个模型类中,我有一部分数据是从数据库中提取的,另一部分是通过对外部资源执行 HTTP REST 请求获取的。

我已经为“外部”资源实现了延迟加载,但是每次用户点击需要与该资源绑定的字段之一的页面时,我都会重新执行 HTTP 请求,这显然无法扩展.

我的问题是:对于这种情况,您认为哪种缓存策略值得?如何仅为通过 HTTP 延迟加载的数据提供缓存?我想实现一个缓存,它可以按时间(比如说 5 分钟)或当用户执行应该使当前缓存无效的操作时过期。

如何实现它以及保留这些缓存的内存权衡是什么?是否建议将该数据保存在会话中或服务器上的单独结构中?我应该考虑使用 GigaSpaces 等外部缓存框架之一吗?

提前感谢您为此问题提供的任何提示。

【问题讨论】:

    标签: ruby-on-rails caching


    【解决方案1】:

    我会推荐以下两种策略之一:

    1. 使用memcached,开源缓存守护进程。客户端库可用于多种流行语言,它支持缓存数据的计划失效等功能。
    2. 在数据库中包含一些字段以存储缓存数据,以及每次保存记录时更新的“cache_last_updated”字段。然后,当从数据库中获取记录时,如果该字段的值超过 5 分钟,您可以从 RESTful API 重新缓存数据(您不是在使用 CouchDB 吗?)并将其保存在数据库中,更新最后更新的时间戳,然后将此数据返回给用户。

    我推荐第一个,因为坦率地说,否则您将在每个请求中对数据库进行多次读取和写入,从而导致显着的性能成本。

    此外,这个问题可能适用于 Ruby on Rails 以外的其他事物 - 很多场景都涉及来自某些外部源的缓存。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 2021-09-21
      • 2012-07-28
      相关资源
      最近更新 更多