ASP.NET应用程序/缓存对象的PHP等价物

ASP.NET应用程序/缓存对象的PHP等价物,php,caching,object,global,Php,Caching,Object,Global,我的Google fu还没有透露我在寻找什么,所以我要把这本公开给大家 来自ASP.NET开发背景,我习惯于使用应用程序和缓存集合将很少修改但经常使用的资源(如数据库中的查找行或静态XML文档的内容)存储在web服务器的内存中,因此,我不必在每次请求时都重新加载这些常用项目 PHP是否有一个等价物?我已经简单地阅读了memcache扩展,但这对我来说不起作用(因为我无法控制服务器配置)。我想实现一些东西,允许我预解析或预选择资源,并生成一种PHP缓存“文件”,该文件将从文件中存储的文本构造缓存对

我的Google fu还没有透露我在寻找什么,所以我要把这本公开给大家

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

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


PHP中是否有某种东西(或者某种类型的助手库)可以让我使用最佳实践来实现这一点?

例如,看看Zend_缓存库。它可以缓存在多个后端。

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


现在,请不要误解我的意思,PHP允许您进行应用程序级数据存储,但您必须访问数据库或磁盘才能获得它。记住这一点,不要担心性能的优化,直到性能被证明是一个问题。我猜百分之九十九的情况下,当性能问题不是由于您编写的一些糟糕的代码造成的时候,您将有足够的资源来构建您自己的小memcached服务器。

这有点像黑客,但在PHP7中工作+

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


啊,是的。我不知道web服务器是如何调用PHP的。谢谢你提醒我:)
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;
}