如何强制php脚本使用页面的缓存版本?

时间:2019-04-03 21:50:09

标签: php caching

我有一个脚本,由于服务器忙,有时需要很长时间才能加载。 该脚本只是一个网页,每隔几分钟显示一次来自数据库表的特定信息。 我想在大多数时间显示最新信息,但是当服务器繁忙时,我不希望此脚本成为服务器的负担,但我仍然希望它显示最新数据。有。

因此,我想做一个简单的检查,就像这样:

$load_on_server = sys_getloadavg()[0];
If(load_on_server > $load_limit) {
  display_cached_version();
} else {
  display_regular_version();
}

但是我不确定如何显示缓存的版本。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

将页面存储在另一个文件中,并根据每个请求对其进行更新。在PHP代码中,检查负载,如果负载大于CPU内核的数量,则file_get_contents会存储页面,如果不是,则正常执行程序。

在每次从数据库成功获取文件时使用file_put_contents(“ cache.html”),并在每个负载过高的请求上使用file_get_contents(“ cache.html”)。

答案 1 :(得分:0)

这是本地PHP解决方案,用于缓存查询结果。

让我们假设返回的数据几乎相同,将其缓存在文件中可能是提高响应时间性能的好方法。因此您可以通过以下示例进行处理:

<?php

if (filemtime('myCacheFile.txt') < time()-1*3600) {
    // declare database connection details  ==> code

    // create connection to database ==> code

    // error handling if connection to database failed ==> code

    // make the SQL call
    if ($result = $db->query("SELECT * FROM myTable")) {
        $rows = array();

        while($row = $result->fetch_array(MYSQL_ASSOC)) {
            $rows[] = $row;
        }

        // store query result in myCacheFile.txt
        file_put_contents('myCacheFile.txt', serialize(json_encode($rows)));


        echo json_encode($rows);
    }

    else {
        echo 'data could not be extracted from the db.';
    }
}
else {
    $data = unserialize(file_get_contents('myCacheFile.txt'));
    return $data;
}
  

刷新数据的生命周期是一个小时,所以我认为   数据可以每小时更改一次,这是刷新缓存中数据的一种方式   也。

希望这对您有所帮助。