APC是什么
Alternative
PHP
Cache (APC)是一种对PHP有效的开放源高速缓冲储存器工具,他能够缓存opcode的php中间码。
PHP
APC提供两种缓存功能,即缓存Opcode(目标文件),我们称之为apc_compiler_cache。同时它还提供一些接口用于PHP开发人员将用户数据驻留在内存中,我们称之为apc_user_cache。
安装PHP APC
cd
/home/myapp
wget
http://pecl.php.net/get/APC-3.1.9.tgz
tar zxvf APC-3.1.9.tgz -C /usr/local/APC-3.1.9
cd /usr/local/APC-3.1.9
/usr/local/php5.3.6/bin/phpize
CFLAGS="-O3" ./configure
-with-php-config=/usr/local/php5.3.6/bin/php-config
--enable-apc
make
sudo make install
一旦启用了APC功能,则会缓存Opcodes到共享内存。
php.ini
[apc]
extension=apc.so
apc.mode = mmap
apc.mmap_file_mask = /var/apc/apc.XXXXXX
apc.cachedir = /var/apc
apc.check_compiled_source = 1
apc.enable_cli = 1
apc.shm_size=1024M
apc.max_file_size=2M
apc.ttl=300
apc.user_ttl=300
apc.gc_ttl=300
参数配置详解:
apc.ttl=0
apc.user_ttl=0
缓存对象的生命周期。其中ttl表示Time To
Live,意味着指定时间后缓存对象会被清除。其中0表示永不过期。我们前面提过,APC能缓存的条目是受限定的,如果你把ttl设置永不过期的话,当缓存条目已满或者缓存空间不够,之后的缓存都将失败。
其中apc.ttl作用于apc_compiler_cache。当apc.ttl大于0时,每次请求都会对比这次的请求时间与上一次请求时间之差是不是大于apc.ttl,如果大于apc.ttl,则会被认缓存条目过期了,会被清理。
比较有意思的是apc.user_ttl,它主要作用于apc_user_cache缓存。我们知道,这种类型的缓存是通过
apc_store($key, $var, $ttl =
0)创建的缓存对象。函数apc_store()中指定的$ttl与php.ini中设定的apc.user_ttl有什么异同,是我们比较关心的。因为它们同样作用于apc_userdata_cache缓存。经过分析,我们知道:判断apc_user_cache
缓存过期的依据是,当apc.user_ttl大于0,且这次http请求时间与上一次http请求时间之差大于apc.user_ttl,则认为相应的缓存条目已过期;或者,user.data.ttl(php函数apc_store()中指定的$ttl)大于0,且这次http请求时间与缓存对象创建时间ctime之差大于user.data.ttl,则同样认为缓存条目已过期,会被清除。
参考资料: