加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – Rails 3 – 缓存Web服务调用

发布时间:2020-12-17 03:27:58 所属栏目:百科 来源:网络整理
导读:在我的应用程序中,在主页操作中,我调用返回 JSON的特定Web服务. parsed = JSON.parse(open("http://myservice").read)@history = parsed['DATA'] 这个数据每60秒不会改变超过一次,并且不会在每个访问者的基础上改变,所以我希望,理想情况下,缓存@history变量
在我的应用程序中,在主页操作中,我调用返回 JSON的特定Web服务.

parsed = JSON.parse(open("http://myservice").read)
@history = parsed['DATA']

这个数据每60秒不会改变超过一次,并且不会在每个访问者的基础上改变,所以我希望,理想情况下,缓存@history变量本身(因为解析不会产生新的结果)和自动如果它超过一分钟,则使其无效.

我不确定这样做的最好方法.默认的Rails缓存方法似乎都更倾向于需要手动过期的内容.我确信有一种快速简便的方法可以做到这一点,我只是不知道它是什么!

解决方法

您可以使用内置的Rails缓存:

@history = Rails.cache.fetch('parsed_myservice_data',:expires_in => 1.minute) do
  JSON.parse connector.get_response("http://myservice")
end

这种方法的一个问题是重建要缓存的数据时需要
很长一段时间如果您在此期间收到许多客户请求,则每个请求都会
得到一个缓存未命中并调用你的块,导致大量的重复工作,更不用说缓慢的响应时间.

编辑:在Rails 3.x中,您可以将选项:race_condition_ttl传递给fetch方法以避免此问题.阅读更多关于它here.

在以前版本的Rails中,一个很好的解决方案是设置一个后台/ cron作业,以定期运行,以获取和解析数据并更新缓存.

在您的控制器或型号中:

@history = Rails.cache.fetch('parsed_myservice_data') do
  JSON.parse connector.get_response("http://myservice")
end

在你的背景/ cron工作中:

Rails.cache.write('parsed_myservice_data',JSON.parse connector.get_response("http://myservice"))

这样,您的客户端请求将始终获得新的缓存数据(第一个除外)请求后台/ cron作业是否尚未运行.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读