我开发了一个非常小的REST API(使用PHP),它提供有关用户的信息(也更新和创建用户,但问题无关紧要)。只是为了显示可用的调用(顺便说一下JSON输出):
/api/users/54216
/api/users/54216?fields=id,name
/api/users/54216/photos
54216
是一个示例用户ID。
直到今天,我只使用缓存来保存html页面以显示,真的不复杂 - 从未使用缓存来保存数据。
我应该怎么做才能保存这些电话,以及如何使用它呢?我的目标是(我认为......)将数据保存到JSON
文件一次X分钟,并在需要时获取文件缓存并decode
。
另外,您如何建议我缓存特定用户的信息?因为调用no.1输出所有信息并且只调用no.2输出特定字段,我不想使用2个缓存文件,因为它实际上没有效果。
我从未参与过本节(缓存[json]数据和REST API,这是我的第一次),所以我很困惑。
修改
我在谈论服务器端缓存。
答案 0 :(得分:2)
我建议你阅读HTTP Cache
第一个重要的原则是了解HTTP缓存的工作原理, 基本上有两个部分,TTL(Cache-Control)和Stale Check (ETag的)。当您需要由源服务器生成资源时 想到它消失了。你不再控制它,你只能得到它 向客户提出如何处理的建议。他们俩 你有的机制是TTL(客户应该保留多长时间) 检查之前缓存中的对象)和陈旧检查(这是一个 可以使用new发送的已返回资源的版本 GET请求到原始服务器,说“嘿,我有这个版本 它仍然很好“。给Origin服务器说机会,是的, 保持使用那个并提供一个新的TTL,如果它仍然有效。
您需要以不同的方式使用这两个控件来获取 你想要的效果。例如,在提供永远不会的文件时 改变(比如构建的css)你可以设置一个非常长的TTL,和 没有etag。对于不经常变化的东西,但是当它发生变化时 变化需要快速(就像一个党员 你会设置一个低TTL(如1分钟)和ETag。在 在第二个例子中,你设置一个1分钟的低TTL来帮助爆发 从客户端到不包括原始服务器(规模)和ETag 允许Origin服务器跳过预订的构造 object,如果它有办法验证当前有效的ETag是什么 比构建整个预订更快。另一个例子 会是不会经常变化的东西,当它发生时,它可以 传播缓慢(如用户的广告推荐个人资料)您可以 设置更高的TTL(比如6小时)并且不用太担心ETag (虽然它仍然有用)。 参考:https://groups.google.com/d/msg/api-craft/YJMH0XMQJIM/HtdAPEXbQLMJ
或者,如果要在服务器端缓存,请查看memcached(tutorial)
另请参阅反向代理缓存解决方案,如varnish等。
答案 1 :(得分:0)
https://devcenter.heroku.com/articles/ios-network-caching-http-headers
这解释了从iOS角度看的缓存,但很好地解释了Cache-Control,max-age,ETags,Last Modified等术语。