首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存web服务结果并使其过期

缓存web服务结果并使其过期
EN

Stack Overflow用户
提问于 2011-08-13 06:05:26
回答 1查看 334关注 0票数 0

我是一个新的Rails程序员,正在开发一个web应用程序。作为这个web应用程序的一部分,我正在使用一些由其他站点的web服务生成的JSON页面。根据用户的新请求,我可能需要轮询3-5个web服务。

为了帮助提高重复的公共请求的速度,我尝试对服务的结果进行本地缓存。对于每个服务,如果它们有任何匹配的结果,我会解析它们的格式,并将行插入到我的本地表中,以及“pull”id (它包含我从中提取的源和日期)。

我的问题是:这似乎是一件很常见的事情。我已经让它在单个数据源上工作得很好,但需要扩展,所以在我编写一系列帮助方法来帮助我的生活之前,我很好奇是否有更好的方法在Rails框架中使用gem或其他插件来实现这一点……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-13 09:23:59

这种类型的行为最好在后台完成。

更传统但仍然很棒的Ruby方法是在你的DB中创建一堆数据源,并创建一个rake任务,它使用你的应用程序中任何你想要的技术(使用像mechanize或nokogiri这样的gem,编写一个模型,在你的app/lib文件夹中添加一些有用的Ruby类,插入一个插件或其他来自供应商的东西,等等)。然后,您可以通过传统的cron作业或使用clockwork (本质上是递归任务管理器的一个非常棒的ruby版本)来调用这个rake任务。

更新的方式是使用DelayedJob之类的东西来处理单个数据源的更新。当您成功获取给定源的数据时,可以随意设置过期时间,当您的应用程序下一次获取该缓存数据时,它可以在队列中创建另一个作业,供您的某个工作线程运行,从而更新该数据源。一旦该作业完成,对该数据的请求就可以转到最新的信息。这可以防止一些事情,比如5分钟的rake任务在较早的源上失败,并且从不让任何数据更新,或者有6小时的轮询间隔,因为互联网中断了12秒,所以你的数据都是过时的。

有很多工具可供使用,我知道您在询问详细信息,但我希望这篇关于方法/体系结构的更一般的信息可以让您了解您可以做些什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7046832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档