代码之家  ›  专栏  ›  技术社区  ›  kolrie

哪种缓存策略最适合这个问题?

  •  1
  • kolrie  · 技术社区  · 16 年前

    首先,让我说我对rails非常陌生,只使用了几天。

    我的第一个应用程序与传统的有点不同:在我的一个模型类上,我有从数据库中提取的部分数据,还有一部分是通过向外部资源发出HTTP REST请求而获取的。

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

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

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

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   zvoase    16 年前

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

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

    我建议采用第一种方法,因为坦率地说,否则每次请求都会对数据库进行多次读写操作,从而产生巨大的性能成本。

    此外,这个问题可能适用于Ruby on Rails以外的东西——很多场景都涉及从外部源进行缓存。