一、APC介绍
APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”,它为我们提供了缓存和优化PHP的中间代码的框架。
也就是优化Opcache,也就是PHP的字节码。
APC的缓存分两部分:系统缓存和用户数据缓存,
系统缓存:它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存3600s(一小时)。但是这样仍会浪费大量CPU时间,因此可以在php.ini中设置system缓存为永不过期(apc.ttl=0)。不过如果这样设置,改运php代码后需要重启WEB服务器。目前使用较多的是指此类缓存。
用户数据缓存:缓存由用户在编写PHP代码时用apc_store和apc_fetch函数操作读取、写入的。如果数据量不大的话,可以一试。如果数据量大,使用类似memcache此类的更加专著的内存缓存方案会更好。
二、APC模块安装
1.安装
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 && make install
在php.ini加入:extension=apc.so
service php-fpm5 restart
2.编译出现的问题
configure.in:1347: warning: AC_CACHE_VAL(lt_prog_compiler_pic_works, …): suspicious cache-id, must contain _cv_ to be cached
aclocal.m4:3548: AC_LIBTOOL_COMPILER_OPTION is expanded from…
aclocal.m4:8133: AC_LIBTOOL_PROG_COMPILER_PIC is expanded from…
configure.in:1347: warning: AC_CACHE_VAL(lt_prog_compiler_pic_works_CXX, …): suspicious cache-id, must contain _cv_ to be cached
aclocal.m4:6549: _LT_AC_LANG_CXX_CONFIG is expanded from…
aclocal.m4:5605: AC_LIBTOOL_LANG_CXX_CONFIG is expanded from…
aclocal.m4:4737: _LT_AC_TAGCONFIG is expanded from…
解决方法:
wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
tar -zvxf m4-1.4.9.tar.gz
cd m4-1.4.9/
./configure && make && make install
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
tar -zvxf autoconf-2.62.tar.gz
cd autoconf-2.62/
./configure && make && make install
export PHP_AUTOCONF=/usr/bin/autoconf
export PHP_AUTOHEADER=/usr/bin/autoheader
三、APC使用
<?php
if
class Apc{
/**
* Apc缓存-设置缓存
* 设置缓存key,value和缓存时间
* @param string $key KEY值
* @param string $value 值
* @param string $time 缓存时间
*/
public function set_cache($key, $value, $time = 0) {
if ($time == 0) $time = null; //null情况下永久缓存
return apc_store($key, $value, $time);;
}
/**
* Apc缓存-获取缓存
* 通过KEY获取缓存数据
* @param string $key KEY值
*/
public function get_cache($key) {
return apc_fetch($key);
}
/**
* Apc缓存-清除一个缓存
* 从memcache中删除一条缓存
* @param string $key KEY值
*/
public function clear($key) {
return apc_delete($key);
}
/**
* Apc缓存-清空所有缓存
* 不建议使用该功能
* @return
*/
public function clear_all() {
apc_clear_cache('user'); //清除用户缓存
return apc_clear_cache(); //清楚缓存
}
/**
* 检查APC缓存是否存在
* @param string $key KEY值
*/
public function exists($key) {
return apc_exists($key);
}
/**
* 字段自增-用于记数
* @param string $key KEY值
* @param int $step 新增的step值
*/
public function inc($key, $step) {
return apc_inc($key, (int) $step);
}
/**
* 字段自减-用于记数
* @param string $key KEY值
* @param int $step 新增的step值
*/
public function dec($key, $step) {
return apc_dec($key, (int) $step);
}
/**
* 返回APC缓存信息
*/
public function info() {
return apc_cache_info();
}
}
四、忠告
笔者是在面试的时候,碰到面试官问apc,倒是有一点懵逼,不过仔细研究一下,apc就是相当于PHP自带的缓存,适用于一些系统设置等PHP变量,生命周期是整个应用(从httpd守护进程到httpd守护进程关闭),使用apc比memcache更好,因为(不需要经过网络传输协议),但是现实来讲的话,系统变量都是写到文件,那么这个apc,又是否是有些多余那?
看了一下apc的项目发布事件流,最近一次发布更新,是在2012年,似乎没人维护的节奏,果真是”可选PHP 缓存”,可用可不用。
The index is the first page a browser will check out
once your domain is known as. Lastly, do not be satisfied after reaching a good
position in the market. That’s about that to do
in order to make cash on the on the net. https://918kiss.bid/games/mega888