我用 PHP 创建了一个小型且非常简单的基于 REST 的 Web 服务。该服务从不同的服务器获取数据并返回结果。它更像是一个代理而不是一个完整的服务。
Client --(REST call)--> PHP Webservice --(Relay call)--> Remote server
<-- Return data ---
为了尽可能降低成本,我想通过在服务器内存中维护一段时间的数据来在 PHP Web 服务系统上实现一个缓存表,并且只在超时后重新请求数据(比如说 30 分钟后)。
在伪代码中,我基本上想这样做:
$id = $_GET["id"];
$result = null;
if (isInCache($id) && !cacheExpired($id, 30)){
$result = getFromCache($id);
}
else{
$result = getDataFromRemoteServer($id);
saveToCache($result);
}
printData($result);
上面的代码应该从由 id 标识的远程服务器获取数据。如果它在缓存中并且还没有经过 30 分钟,则应从缓存中读取数据并作为 Web 服务调用的结果返回。如果不是,则应查询远程服务器。
在思考如何做到这一点时,我意识到了两个重要方面:
- 由于性能问题,我不想使用文件系统 I/O 操作。相反,我想将缓存保留在内存中。因此,没有 MySQL 或本地文件操作。
- 我不能使用会话,因为缓存的数据必须在全球不同的用户、浏览器和互联网连接之间共享。
所以,如果我能以某种方式在多个 GET 请求之间共享内存中的对象,我认为我将能够很容易地实现这个缓存系统。
但我怎么能这样做呢?
编辑:我忘了提到我不能在那个 PHP 服务器上安装任何模块。这是一个纯粹的“仅网络托管”服务。