`

PHP之APC缓存

    博客分类:
  • PHP
apc 
阅读更多

 一、APC缓存简介

APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。

系统缓存

它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存3600s(一小时)。但是这样仍会浪费大量CPU时间。因此可以在php.ini中设置system缓存为永不过期(apc.ttl=0)。不过如果这样设置,改运php代码后需要重启WEB服务器。目前使用较多的是指此类缓存。

用户数据缓存

缓存由用户在编写PHP代码时用apc_store和apc_fetch函数操作读取、写入的。如果数据量不大的话,可以一试。如果数据量大,使用类似memcache此类的更加专著的内存缓存方案会更好

缓存key生成规则

APC的缓存中的每个slot都会有一个key,key是apc_cache_key_t结构体类型,除了key相关的属性,关键是h字段的生成。 h字段决定了此元素落于slots数组的哪一个位置。对于用户缓存和系统缓存,其生成规则不同。 用户缓存通过apc_cache_make_user_key函数生成key。通过用户传递进来的key字符串,依赖PHP内核中的hash函数(PHP的hashtable所使用的hash函数:zend_inline_hash_func),生成h值。

系统缓存通过apc_cache_make_file_key函数生成key。通过APC的配置项apc.stat的开关来区别对待不同的方案。在打开的情况下,即 apc.stat= On 时,如果被更新则自动重新编译和缓存编译后的内容。此时的h值是文件的device和inode相加所得的值。在关闭的情况下,即apc.stat=off时,当文件被修改后,如果要使更新的内容生效,则必须重启Web服务器。此时h值是根据文件的路径地址生成,并且这里的路径是绝对路径。即使你是使用的相对路径,也会查找PG(include_path)定位文件,以取得绝对路径,所以使用绝对路径会跳过检查,可以提高代码的效率。

常用APC设置

apc.cache_by_default 默认启用缓存。1表示“启用”,0表示“禁用”
apc.filters 根据逗号分隔的POSIX正则表达式判断文件需要缓存还是不需要缓存。以a+开头的正则
表达式将强制APC不缓存与此正则表达式匹配的任何文件。以a-开头的正则表达式将强制
APC缓存与此正则表达式匹配的任何文件
apc.stat 启用或禁用APC对于所有请求PHP脚本是否有更改的检查。每次调用脚本时均会执行此
过程。如果禁用该设置,在对PHP脚本进行任意更改后均需要重新启动WEB服务器以
清除缓存并更改脚本内容。0=禁用,1=启用,默认1
apc.enabled 启用或禁用APC缓存。0=禁用,1=启用,默认1
apc.shm_size 设置APC允许使用的共享内存大小,此值以兆字节为单位
apc.shm_segments 设置可用的共享内存段总数
apc.include_once_override 启用或禁用include_once和require_once的优化。启用该设置时,可减少PHP内部函数进行的额外系统调用。0=禁用,1=启用,默认0
apc.optimization 设置优化级别。0=禁用优化功能
apc.num_files_hint 设置你认为需要缓存的文件数。默认值1000,如果不确定文件数,可以设置0
apc.ttl 设置文件存储在缓存中的过期时间,以秒为单位。
apc.write_lock 开启该设置将强制单个进程缓存特定的脚步。适用于必须缓存多个文件的大流量WEB服务器或应用程序
 添加缓存过程

以用户缓存为例,apc_add函数用于给APC缓存中添加内容。如果key参数为字符串中,APC会根据此字符串生成key,如果key参数为数组,APC会遍历整个数组,生成key。根据这些key,APC会调用_apc_store将值存储到缓存中。由于这是用户缓存,当前使用的缓存为apc_user_cache。执行写入操作的是apc_cache_make_user_entry函数,其最终调用apc_cache_user_insert执行遍历查询和写入操作。与此对应,系统缓存使用apc_cache_insert执行写入操作,其最终都会调用_apc_cache_insert。

不管是用户缓存还是系统缓存,大体的执行过程类似,步骤如下:

  1. 通过求余操作,定位当前key的在slots数组中的位置: cache->slots[key.h % cache->num_slots];

  2. 在定位到slots数组中的位置后,遍历当前key对应的slot链表,如果存在slot的key和要写入的key匹配或slot过期,清除当前slot。

  3. 在最后一个slot的后面插入新的slot。

 

二、APC模块安装

A.WINDOWS下安装APC

第一步:下载php_apc.dll 在http://pecl.php.net/package/apc 要与php版本对应 将php_apc.dll放入你的ext目录

第二步:让php.ini支持apc扩展模块。 然后打开php.ini 加入:

extension=php_apc.dll
apc.rfc1867 = on
apc.max_file_size = 100M
upload_max_filesize = 100M
post_max_size = 100M
//以上参数可自己定义
  

第三步:检查是否支持PHP APC apc_store apc_fetch

查看phpinfo中是否有apc相关项

B.LIUNX下安装APC

第一步:下载和安装

wget http://pecl.php.net/get/APC-3.1.8.tgz
tar -zxvf APC-3.1.8.tgz cd APC-3.1.8
/usr/local/php/bin/phpize
./configure --enable-apc --enable-mmap --enable-apc-spinlocks --disable-apc-pthreadmutex --with-php-config=/usr/local/php/bin/php-config
make
sudo make install
 第二步:配置APC

在/usr/local/php/etc/php.ini 加入以下配置项:

extension = "apc.so" ;
;APC setting
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64M
apc.optimization = 1
apc.num_files_hint = 0
apc.ttl = 0
apc.gc_ttl = 3600
apc.cache_by_default = on

 第三步:检查安装是否成功

重启apache 或者 /usr/local/php/sbin/php-fpm restart

查看phpinfo中是否有apc相关项

 

三、配置参数详解和使用总结

1,使用Spinlocks锁机制,能够达到最佳性能。

2,APC提供了apc.php,用于监控与管理APC缓存。不要忘记修改管理员名和密码

3,APC默认通过mmap匿名映射创建共享内存,缓存对象都存放在这块”大型”的内存空间。由APC自行管理该共享内存

4,我们需要通过统计调整apc.shm_size、apc.num_files_hints、apc.user_entries_hint的值。直到最佳

5,好吧,我承认apc.stat = 0 可以获得更佳的性能。要我做什么都可以接受.

6,PHP预定义常量,可以使用apc_define_constants()函数。不过据APC开发者介绍说pecl hidef性能更佳,抛异define吧,它是低效的。

7,函数apc_store(),对于系统设置等PHP变量,生命周期是整个应用(从httpd守护进程直到httpd守护进程关闭),使用APC比Memcached会更好。必竟不要经过网络传输协议tcp。

8,APC不适于通过函数apc_store()缓存频繁变更的用户数据,会出现一些奇异现象。

 

总结:

APC 的缓存分两部分:系统缓存和用户数据缓存。
系统缓存:是自动使用的,是指 APC 把 PHP 文件源码的编译结果缓存起来,然后在再次调用时先对比时间标记。如果未过期,则使用缓存代码运行。
用户数据缓存:由用户在编写 php 代码时用 apc_store 和 apc_fetch 函数操作读取、写入的.如果量不大的话我建议可以使用一下.如果量大,我建议使用 memcache 会更好。
因为apc随着数据量增大, 性能下降明显, 在超过8万条后, 性能低于Memcache。但是在CLI模式下运行, apc性能稳定, 60万条数据一直远超memcache。

分享到:
评论

相关推荐

    PHP之APC缓存详细介绍 apc模块安装

    1、APC缓存简介 APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”.它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。系统缓存它是指APC把PHP文件源码的编译...

    使用APC缓存优化PHP程序

    【使用APC缓存优化PHP程序】 APC(Alternative PHP Cache)是PHP的一个重要的性能优化工具,它通过缓存PHP的编译后的中间代码来提高应用程序的运行速度,减轻服务器负担。APC不仅可以提高网站的响应速度,还能降低...

    PHP 缓存类和apc缓存类

    此外,还将探讨 APC 缓存的具体实现。 ### 一、缓存抽象类概述 在给定的代码中,定义了一个名为 `Cache_Abstract` 的抽象类。这个类提供了缓存操作的基本框架,包括读取、存储、删除缓存项等核心功能,并且还引入...

    APC编译缓存扩展for php on windows ,php_apc-3.1.10-5.3-vc9-x86.zip

    APC(Alternative PHP Cache)是PHP的一个非常重要的扩展,它主要功能是对PHP代码进行编译缓存,以提升PHP应用程序的运行效率。在标题中提到的"php_apc-3.1.10-5.3-vc9-x86.zip"是一个专为Windows平台设计的APC扩展...

    使用APC缓存优化PHP程序.rar

    标题 "使用APC缓存优化PHP程序" 指向的是一个关于如何通过APC(Alternative PHP Cache)来提升PHP应用程序性能的主题。APC是一种广泛使用的PHP加速器,它通过缓存PHP编译后的代码来减少CPU使用和提高网页加载速度。 ...

    php memcache php_apc php_file 缓存插件

    本文将深入探讨标题"php memcache php_apc php_file 缓存插件"所涉及的三个主要缓存机制:文件缓存、Memcache和APC(Alternative PHP Cache),以及它们在PHP中的应用。 1. 文件缓存: 文件缓存是最基础的缓存方式...

    php5.3 php_apc

    4. **避免缓存冲突**:对于多用户或多进程的环境,需要注意APC缓存中的锁管理,防止数据竞争。 5. **最佳实践**:对于大型项目,可以结合其他缓存策略,如数据库缓存、对象缓存等,以实现更全面的性能提升。 总的...

    php_apc.dll

    - 对于生产环境,定期清理APC缓存以保持数据新鲜。 - 注意APC的版本更新,因为旧版本可能存在安全问题或不兼容性。 综上所述,`php_apc.dll`是PHP的加速缓存插件,对提升PHP应用性能有重要作用。在WAMP环境下,正确...

    php5.3.3_APC扩展模块

    1. **使用APC缓存**:开发人员可以通过`apc_add`和`apc_fetch`等函数来操作缓存。例如: ```php $data = apc_fetch('my_key'); if (!$data) { $data = 'Hello, World!'; apc_store('my_key', $data); } echo ...

    windows版php apc cached扩展dll

    **Windows版PHP APC缓存扩展DLL** APC(Alternative PHP Cache)是PHP中的一款非常重要的缓存机制,专为提高PHP脚本的执行效率而设计。在PHP 5.3.28版本中,APC作为PHP的一个扩展,提供了一个高效的opcode缓存,将...

    php_apc-3.1.10-5.3-vc9-x86.rar

    APC(Alternative PHP Cache)是PHP的一个流行缓存和优化工具,它能够加速PHP脚本的执行速度,通过将编译后的PHP代码存储在共享内存中,避免了每次请求时重复编译的过程。版本号 "3.1.10" 表示这是APC的第3.1.10次...

    php 5.4 apc扩展 dll文件

    在PHP 5.4版本中,Alternative PHP Cache (APC)是一个非常重要的性能优化工具,它是一个免费且开源的缓存和数据存储机制,主要针对PHP的opcode进行缓存,从而加速PHP应用程序的执行速度。 **APC扩展的作用** 1. **...

    php缓存技术总结

    APC缓存扩展通过php.ini进行配置,它能够缓存编译后的PHP代码,减少每次页面请求的编译时间,大幅提高PHP应用性能。 八、缓存有效时间与更新 缓存数据需要设置有效时间,超过这个时间后缓存失效,需要重新生成或...

    PHP 缓存 PHP 缓存

    - 解决方法之一是将空值也进行缓存,但设置较短的过期时间。 4. **并发问题:** - 在多线程或多进程环境中,多个请求可能会同时尝试更新相同的缓存项,导致数据不一致。 - 解决方案包括使用分布式锁服务或在缓存...

    php apc扩展插件,PHP大文件上传

    首先,APC(Alternative PHP Cache)是PHP的一个重要缓存扩展,它的主要功能是加速PHP的执行效率。APC提供了对PHP代码的编译结果进行缓存的能力,避免了每次请求时重复编译的过程。这大大减少了服务器的CPU负载,并...

    apc:启用替代 PHP 缓存

    一个示例配置可以是在 APC 中缓存“cache”和“cache_bootstrap”,在 Memcached 中缓存“cache_field”和“cache_menu”,以及在数据库中缓存“cache_filter”。 安装 步骤1 像任何其他背景模块一样安装。 有关更...

    CacheTool:一个清除APC/opcode缓存的类库.zip

    然后,通过PHP的`php`命令行接口运行CacheTool,比如`php cachetool.phar apc:clear`来清空APC缓存。 **6. 结合持续集成与自动化** 在持续集成(CI)和持续部署(CD)流程中,CacheTool可以被集成进来,自动清理...

    php中apc缓存使用示例

    **PHP中的APC缓存详解** APC(Alternative PHP Cache)是PHP的一个开源扩展,用于缓存和优化PHP代码。它提供了一个免费且快速的PHP字节码缓存,能够提高PHP应用程序的性能,减少PHP解释器对源代码的解析和编译时间...

Global site tag (gtag.js) - Google Analytics