PHP相当于ASP.NET Application / Cache对象

时间:2009-11-16 05:10:19

标签: php caching object global

我的Google-fu还没有透露我正在寻找的东西,所以我把它放到人群中。

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

PHP有同等效力吗?我已经简要介绍了memcache扩展,但这对我不起作用(因为我无法控制服务器配置。)我很想实现一些可以让我预先解析或预先实现的东西 - 选择资源并生成一种PHP缓存“文件”,它将从存储在文件中的文字构造缓存对象,但这对我来说似乎是一个非常糟糕的解决方案。

PHP中有什么东西(或者某种类型的帮助库)可以让我使用最佳实践来实现这一目标吗?

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这有点小技巧,但适用于 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