php - 使用 PHP 缓存变量?

标签 php caching glob

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

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

有什么方法可以缓存这个结果,这样我就不必一次又一次地执行这些功能。

最佳答案

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

  • 将计算结果存储在 session 、数据库或文件中 - 然后查找
  • 预先计算,然后在需要时查找
  • 存储您的页面(文件中的 PHP 输出)并向用户提供存储的版本
  • 使用缓存/HTTP加速器,例如Varnish .

在这种情况下,我认为预先计算可以满足您的需求。只需将您的代码放在一个脚本中,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/命令行工具而异,如果您有现场服务器或使用专业的网络主机,则存在差异。因此,请在 stackoverflow 中搜索适合您特定情况的 cron 作业。

假设您正在运行一个 cron 作业,将 $total_pages 的值保存到文件中,然后您可以通过以下方式在网页上检索您的值

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

这将保证提高所有需要提供$total_pages值的页面的性能。与accepted answer相比,该解决方案具有一些显着的优点:

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

关于php - 使用 PHP 缓存变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28523488/

相关文章:

python - glob.glob(...) 应该优于 os.listdir(...) 还是相反?

php - 如何在php中测试一个调度程序

php - 如何减小数据库大小?

php - 使用类属性缓存数据 - 为什么这是个坏主意?

sql - 如何缓存sql查询,其结果永远不会改变?

Gulp src 忽略部分 glob 路径以进行递归复制

node.js - Glob 忽略模式似乎不适用于 gulp

php - 带有内连接的sql查询中的if语句

PHP - 从字符串中删除所有选项卡

caching - Spark SQL : how to cache sql query result without using rdd. 缓存()