首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用APC进行PHP缓存

使用APC进行PHP缓存
EN

Stack Overflow用户
提问于 2013-01-12 03:57:41
回答 3查看 7.2K关注 0票数 3

假设我将数据缓存在PHP数组中的PHP文件中,如下所示:

/cache.php

代码语言:javascript
复制
<?php return (object) array(
    'key' => 'value',
);

我包含的缓存文件如下:

代码语言:javascript
复制
<?php
$cache = include 'cache.php';

现在,问题是APC会自动将缓存文件缓存在内存中吗?我的意思是作为一个典型的操作码缓存,就像所有的.php文件一样。

如果我以不同的方式存储数据,例如以JSON格式(cache.json),数据将不会被APC自动缓存?

apc_store会更快/更好吗?

EN

回答 3

Stack Overflow用户

发布于 2013-01-12 04:08:01

不要将APC的缓存能力与其优化中间代码和缓存编译代码的能力混为一谈。APC提供了两种不同的功能:

  1. 它提供了一种方便的缓存数据结构(对象、数组等)的方法,以便您可以使用apc_store和apc_fetch
  2. 存储/获取它们。它保留脚本的已编译版本,以便下次运行时,脚本运行速度更快

让我们看一个(1)的例子:假设你有一个数据结构,需要1秒的时间来计算:

代码语言:javascript
复制
function calculate_array() {
    sleep(1);
    return array('foo' => 'bar');
}
$data = calculate_array();

您可以存储它的输出,这样就不必再次调用速度较慢的calculate_array():

代码语言:javascript
复制
function calculate_array() {
    sleep(1);
    return array('foo' => 'bar');
}
if (!apc_exists('key1')) {
    $data = calculate_array();
    apc_store('key1', $data);
} else {
    $data = apc_fetch('key1');
}

这将是相当快的,比原来的1秒少得多。

现在,对于上面的(2):使用APC不会使您的程序运行快于1秒,这是calculate_array()所需的时间。但是,如果您的文件另外需要(比方说) 100毫秒来初始化和执行,那么只需启用APC就需要(大约) 20毫秒。所以你的初始化/准备时间增加了80%。这在生产系统中可能会有很大的不同,因此简单地安装APC可以对脚本的性能产生明显的积极影响,即使您从未显式调用它的任何函数

票数 10
EN

Stack Overflow用户

发布于 2013-01-12 04:23:04

如果您只存储静态数据(如示例中所示),则最好使用apc_store

这背后的原因不是操作码缓存更快还是更慢,而是您正在使用include将静态数据提取到作用域中。

即使使用操作码缓存,仍然会在每次执行时检查文件的一致性。PHP不必解析内容,但它必须检查该文件是否存在,以及自创建操作码缓存以来该文件是否未更改。文件系统检查的资源开销很大,即使它只是对文件执行stat检查。

因此,在这两种方法中,我将使用apc_store来完全删除文件系统检查。

票数 2
EN

Stack Overflow用户

发布于 2013-01-12 04:29:46

与其他答案不同,我将使用array-file-solution (第一个)。

代码语言:javascript
复制
<?php return (object) array(
    'key' => 'value',
);

原因是,对于这两种解决方案,您都站在正确的一边,但当您让APC自己缓存时,您不必纠结于apc_*()-functions。您只需包含并使用它即可。当您设置

代码语言:javascript
复制
apc.stat = 0

您也可以避免在每个include上使用stat-calls。这对于生产环境很有用,但请记住在每次部署时清除系统缓存。

http://php.net/apc.configuration.php#ini.apc.stat

哦,别忘了:使用文件方法,即使没有APC,它也可以工作。对于通常不应该使用任何缓存的开发设置很有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14285727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档