什么缓存策略最适合这个问题?

时间:2008-11-18 11:21:38

标签: ruby-on-rails caching

首先,请允许我说我对rails很新,已经使用了它几天。

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

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

我的问题是:您认为哪种缓存策略对此方案有价值?如何只为通过HTTP延迟加载的数据设置缓存?我想实现一个缓存,它可以按时间(比如说5分钟)到期,或者当用户执行一个应该使当前缓存无效的操作时。

如何实现它以及保留这些缓存的内存权衡?将数据保存在会话上还是服务器上的单独结构上是否可取?我应该考虑其中一个外部缓存框架,如GigaSpaces等......?

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

1 个答案:

答案 0 :(得分:1)

我建议采用以下两种策略之一:

  1. 使用开源缓存守护程序memcached。客户端库可用于多种流行语言,并支持缓存数据的预定失效等内容。
  2. 在数据库中包含一些字段以存储缓存数据,以及每次保存记录时都会更新的“cache_last_updated”字段。然后,当从数据库中获取记录时,如果该字段的值超过5分钟,您可以从RESTful API重新缓存数据(您不是在使用CouchDB吗?)并将其保存在数据库中,更新上次更新的时间戳,然后将此数据返回给用户。
  3. 我建议使用第一个,因为坦率地说,否则您将根据请求对数据库进行多次读写操作,从而产生显着的性能成本。

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