如何在PHP中的多个get请求之间共享对象?
我用PHP创建了一个小而简单的基于REST的Web服务。 此服务从其他服务器获取数据并返回结果。它更像是一个代理,而不是一个完整的服务如何在PHP中的多个get请求之间共享对象?,php,web-services,rest,caching,Php,Web Services,Rest,Caching,我用PHP创建了一个小而简单的基于REST的Web服务。 此服务从其他服务器获取数据并返回结果。它更像是一个代理,而不是一个完整的服务 Client --(REST call)--> PHP Webservice --(Relay call)--> Remote server <-- Return data --- 上面的代码应该从由id标识的远程服务器获取数据。如果数据在缓存中,并且30分钟尚未过去,则应从缓存读取数据,并作为
Client --(REST call)--> PHP Webservice --(Relay call)--> Remote server
<-- Return data ---
上面的代码应该从由id标识的远程服务器获取数据。如果数据在缓存中,并且30分钟尚未过去,则应从缓存读取数据,并作为webservice调用的结果返回。如果不是,则应查询远程服务器
在思考如何做到这一点时,我意识到了两个重要方面:
编辑:我忘了提到我不能在那个PHP服务器上安装任何模块。这是一个纯粹的“仅限webhosting”服务。我不会在(PHP)应用程序级别实现缓存。REST是HTTP,因此您应该在internet和web服务器之间使用缓存HTTP代理。只要应用程序不断增长(如果您担心成本),两台服务器、web服务器和代理都可以在同一台机器上运行 在应用程序或服务器级缓存方面,我看到了两个基本问题:
- 使用memcached会导致这样一种情况,即需要将用户会话绑定到memcache所在的物理服务器。这使得水平缩放变得更加复杂(而且昂贵)
- 软件应该分层开发。缓存不应该是应用层(和/或业务逻辑)的一部分。它是一个使用专门组件的不同层。而且,由于有一些众所周知的解决方案(HTTP缓存代理),因此应该使用这些解决方案来支持自行构建的解决方案
作为初学者和概念验证,我真的会选择基于文件的缓存。访问文件而不是请求远程资源要快得多。事实上,您可能不会注意到文件缓存和内存缓存之间的区别。对于redis、memcached和内存存储中的其他键值engines@dev-我忘了提到我不能在PHP服务器上安装任何模块。这是一个纯粹的“仅限webhosting”服务。您可以简单地指定一个http缓存头并在应用程序前面放置一个缓存http代理吗?@Timo如果您有文件系统I/O性能问题,您应该从重新定义应用程序环境开始。使用典型的webhosting设置无法实现繁重而高效的缓存。这一点很好。在Web服务和客户端之间放置专用缓存/代理可能是最好的方法。
$id = $_GET["id"];
$result = null;
if (isInCache($id) && !cacheExpired($id, 30)){
$result = getFromCache($id);
}
else{
$result = getDataFromRemoteServer($id);
saveToCache($result);
}
printData($result);