8

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

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

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

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

4

3 回答 3

5

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

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

于 2009-11-16T05:28:16.213 回答
0

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

于 2009-11-16T05:18:04.283 回答
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

于 2021-05-12T22:00:46.160 回答