【发布时间】:2016-10-19 13:05:20
【问题描述】:
我必须为 Android 应用程序开发一个 RESTful API,并决定使用 slim 框架与 PHP 一起使用。
一些背景,目前每次客户端应用程序发出请求时,服务器都会执行一些数据库操作并创建有效负载。这会在应用程序使用高峰时段导致服务器负载过高。所以我正在寻找一种方法来缓存这个有效负载,并在请求到来时让它可用。与读取次数相比,此缓存必须很少更新(仅在管理员更改数据库时)。
为了测试这一点,我尝试了以下代码,
在 index.php 中
$app->flag = 1;
还有端点
$app->get("/getContent", function() use ($app){
if($app->flag == 1){
echo 'Changing value';
$app->flag = 0;
return;
}
echo $app->folder;
});
理想的情况是它第一次打印“更改值”,然后打印 0。但是“$app->flag”的值始终是1,位于端点的开头。如何在对端点的连续调用之间持久化数据?
另外,如果我每次都将有效负载存储在一个文件中并执行 I/O 来处理端点请求会更好吗(如果管理员尝试在端点更新文件时,这会引发 I/O 异常吗?正在为客户阅读)?
我对 PHP 还很陌生,非常感谢您的洞察力,甚至您的其他想法。
【问题讨论】:
-
您可以尝试使用 php-apcu 之类的键/值缓存(使用与旧 php-apc 相同的接口进行键/值缓存)。这将缓存保存在内存中而不是文件中(这要慢得多)。你可以在这里阅读更多:php.net/manual/en/book.apcu.php
-
数据结构和类型是什么?
-
如果数据很少更新,问题只存在于高峰时段,为什么不使用HTTP caching?
-
@krasipenkov 这将是 7 或 8 个带有文本数据的 json 数组(每个约 100KB)
-
@GeorgyIvanov 我更喜欢从更新到更新缓存它,因为每个请求都会使用不同的缓存数据组合,并且它们在一天中均匀分布,峰值时间约为 5小时
标签: php rest caching slim restful-architecture