2

我正在制作一个网络应用程序,许多用户将在其中查看 Google 地图,地图上的更新通过 ajax 请求拉入服务器。我希望缓存发送给用户的响应,因为它涉及从外部服务器抓取数据,并且只需要每 2-3 分钟更新一次。

因此,一旦有人请求数据,我希望所有其他用户的所有后续请求在接下来的 2-3 分钟内从缓存中提取。我遵循了本教程,详细介绍了如何使用 Heroku 在 Sinatra 中设置 Rack::Cache 和 Dalli gem,当我在使用以下设置的页面上运行测试时,

cache_control :public, max_age: 3000

我可以看到缓存标头正确通过(使用 Google Chrome 开发者工具),但是如果我点击刷新,或者如果我从另一台计算机请求页面,内容显然会重新生成(我放了 Time.now 输出)。但是,如果我转到另一个页面,然后重新键入 URL,则不会重新生成内容。我认为浏览器正在缓存结果,但不是 memcache 服务器?我对缓存的工作原理有根本的误解吗?

4

1 回答 1

0

对于遇到这个问题的人,这里有一些线程可以帮助您解决问题(帮助我)。

在浏览器中“刷新”会导致“缓存控制:max-age=0”: https ://groups.google.com/forum/#!topic/rack-cache/sWHyu4pYwKw

清除缓存并删除缓存目录(这对我有用): https ://github.com/rails/rails/issues/5245

使用 rspec / other Sinatra、Rack::Test 和 Conditional GET 请求为其添加规范

于 2015-04-20T04:30:13.907 回答