【问题标题】:PHP equivalent of ASP.NET Application/Cache objectsASP.NET 应用程序/缓存对象的 PHP 等效项
【发布时间】:2009-11-16 05:10:18
【问题描述】:

我的 Google-fu 还没有透露我在寻找什么,所以我把这个放在人群中。

来自 ASP.NET 开发背景,我习惯于使用 ApplicationCache 集合来存储很少修改但经常使用的资源(例如从数据库中查找行或静态 XML 文档的内容)在 Web 服务器的内存中,因此我不必在每次请求期间重新加载这些常用项目。

PHP 有等价物吗?我已经简要阅读了 memcache 扩展,但这对我不起作用(因为我无法控制服务器配置。)我很想实现一些允许我预解析或预解析的东西- 选择资源并生成一种 PHP 缓存“文件”,该文件将根据存储在文件中的文字构造缓存对象,但这对我来说似乎是一个非常 hacky 的解决方案。

PHP 中是否有某些东西(或者,某种帮助程序库)可以让我使用最佳实践来完成此任务?

【问题讨论】:

    标签: php caching object global


    【解决方案1】:

    简而言之,不,这样的东西在 PHP 中是不可用的。要了解原因,您必须了解 PHP 为每个请求构建了整个环境,然后在请求结束时将其拆除。 PHP 确实 为您提供 $_SESSION 来存储每个会话变量,但在深入研究文档后,您会看到该变量也是在每个请求期间构建的。 PHP(或者更具体地说是 mod php)与其他“应用程序服务器”根本不同。基本上,它不是应用服务器。它是一个按请求脚本运行器。

    现在,不要误会我的意思,PHP 允许您进行应用程序级数据存储,但您必须访问数据库或磁盘才能获取它。不过请记住这一点,在证明性能是一个问题之前,不要担心性能优化。而且我猜 100 次中有 99 次,当性能问题不是由于您编写的一些糟糕的代码时,您将拥有构建自己的漂亮的小型 memcached 服务器的资源。

    【讨论】:

    • 啊,是的。我让它从我的脑海中逃脱,Web 服务器是如何调用 PHP 的。谢谢你提醒我:)
    【解决方案2】:

    以 Zend_Cache 库为例。它可以缓存在多个后端。

    【讨论】:

      【解决方案3】:

      这有点小技巧,但适用于 php 7+

      基本上你将数据缓存到一个临时文件中,然后使用 include 读取该文件,该文件由 php 引擎的内存中文件缓存(opcache)缓存在内存中

      function cache_set($key, $val) {
         $val = var_export($val, true);
         // HHVM fails at __set_state, so just use object cast for now
         $val = str_replace('stdClass::__set_state', '(object)', $val);
         // Write to temp file first to ensure atomicity
         $tmp = "/tmp/$key." . uniqid('', true) . '.tmp';
         file_put_contents($tmp, '<?php $val = ' . $val . ';', LOCK_EX);
         rename($tmp, "/tmp/$key");
      }
      

      下面是我们如何从缓存中“获取”一个值:

      function cache_get($key) {
          @include "/tmp/$key";
          return isset($val) ? $val : false;
      }
      

      来自https://medium.com/@dylanwenzlau/500x-faster-caching-than-redis-memcache-apc-in-php-hhvm-dcd26e8447ad

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-26
        • 1970-01-01
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2012-10-28
        • 2018-07-05
        相关资源
        最近更新 更多