使用PHP缓存变量


Caching a variable using PHP?

我正在检索目录中的所有文件并缓存该值,这样我就不必一次又一次地检索

$memefiles = glob("usermemes/*.jpeg"); 
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);

有没有办法缓存这个结果,这样我就不必一次又一次地执行这些函数了。

优化或缓存的方法有很多,最好的方法取决于您尝试缓存的内容、数量和所需的刷新频率。例如

  • 将计算结果存储在会话、数据库或文件中,然后查找
  • 提前进行计算,然后根据需要查找
  • 存储页面(文件中的PHP输出)并将存储的版本交付给用户
  • 使用像Varnish这样的缓存/HTTP加速器

在这种情况下,我认为前期计算会满足您的需求。只需将代码放入一个名为calculate.php的脚本中,即可将计算出的$total_pages值保存到一个文件中:

<?
$memefiles = glob("usermemes/*.jpeg"); 
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);
file_put_contents('totalpages.dat', $total_pages);
?>

现在设置一个cron作业,每1分钟、5分钟、每小时或您需要的时间运行calcaulate.php。如果您在windows服务器上运行,则应使用等效的任务计划程序。设置cronjobs非常容易,但它在系统和GUI/commandline工具之间有所不同,如果您有现场服务器或使用专业的网络主机,则会有所不同。因此,在stackoverflow上搜索适合您特定情况的cron工作。

假设你有一个cron作业正在运行,将$total_pages的值保存到一个文件中,那么你就可以通过在网页上检索你的值

$total_pages = file_get_contents('totalpages.dat');

这将通过保证提高需要传递$total_pages值的所有页面的性能。与公认的答案相比,这种解决方案具有一些显著的优势:

  • 该任务每次只运行一次,无论您的页面负载是1、10000还是1.000.000个用户
  • 用户仍然可以接收几乎新鲜或几乎实时的数据。新鲜程度由cronjob频率决定

使用cookie。为了将数组存储在cookie中,您必须用json对其进行编码,然后再使用json_decode()对其进行解码。使用下方的代码

 <?php
    if(!isset($_COOKIE['calculation'])) {
    $memefiles = glob("usermemes/*.jpeg"); 
    $total_pages = ceil(sizeof($memefiles)/$num_rec_per_page);
    setcookie('calculation', json_encode($memefiles), time() + (8640000000 * 30), "/"); // Set the cookie for unlimited time
    }
    else{
    $memefiles = json_decode($_COOKIE['calculation'],true);
    }
    ?>

希望这能帮助您