【问题标题】:Slim app (PHP) : Need to store persistent/cache dataSlim app (PHP):需要存储持久化/缓存数据
【发布时间】: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


【解决方案1】:

以下是我的建议:

  1. 您可以使用 memcache 来存储数据吗?您执行一次数据库操作和处理,然后构建 json 并将其存储在 memcache 中(将数据直接存储在内存中,并且您将避免 I/O 操作)

  2. 进行所有数据库处理,构建 json 并将其保存在另一个表中(用于缓存结果)。这种方法的主要问题是一次访问您的数据库的用户数量。虽然这将是简单的读取,并且查询结果肯定会被数据库引擎本地缓存,但您必须考虑一次使用的数据库连接数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多