本文共 3005 字,大约阅读时间需要 10 分钟。
APC(Alternative PHP Cache),又称PHP缓存,是一个用于优化PHP性能的开源框架。它通过缓存和优化PHP的中间代码,提高PHP应用的运行效率。APC的缓存分为两部分:系统缓存和用户数据缓存。
系统缓存是指APC将PHP文件源码编译后的中间代码缓存起来。当需要执行这些代码时,APC会先检查缓存的时间标记。如果未过期,则直接使用缓存中的中间代码运行。默认情况下,系统缓存的过期时间为3600秒(1小时)。然而,这样会浪费大量CPU时间。因此,建议在php.ini中设置apc.ttl=0,使系统缓存永不过期。这样可以节省服务器资源,但需要在修改PHP代码后重新启动WEB服务器才能确保缓存得到更新。
用户数据缓存允许开发者通过apc_store和apc_fetch函数来读取和写入数据。如果数据量较小,可以尝试使用APC缓存。如果数据量较大,建议使用Memcached等专门的内存缓存解决方案。
APC的缓存中每个slot都有一个唯一的key。key的生成规则根据缓存类型有所不同。对于用户缓存,key通过apc_cache_make_user_key函数生成,这函数会使用PHP内核的hash函数(即zend_inline_hash_func)来生成h值,从而确定slot的位置。对于系统缓存,key通过apc_cache_make_file_key生成,生成规则取决于apc.stat的设置。启用apc.stat时,key是根据文件的device和inode生成的;关闭时,key则是文件的绝对路径。
以下是APC常用的配置选项:
| 选项名称 | 选项值及说明 |
|---|---|
apc.cache_by_default | 1(启用),0(禁用)。默认值为1。启用后,PHP文件会自动缓存。 |
apc.filters | 使用POSIX正则表达式指定需要缓存或不需要缓存的文件类型。例如,a+开头的正则表达式会禁止缓存对应文件。 |
apc.stat | 1(启用),0(禁用)。启用后,APC会检查文件是否有更新。如果文件被修改,缓存会自动更新。 |
apc.enabled | 1(启用),0(禁用)。默认值为1。启用后,APC会缓存中间代码。 |
apc.shm_size | 设定APC使用的共享内存大小,以MB为单位。 |
apc.shm_segments | 设定可用的共享内存段总数。 |
apc.include_once_override | 1(启用),0(禁用)。启用后可以减少include_once和require_once的系统调用。 |
apc.optimization | 0(禁用优化),1(启用优化)。默认值为1。 |
apc.num_files_hint | 预估需要缓存的文件数量。设置0则不限制文件数量。 |
apc.ttl | 缓存文件的过期时间,以秒为单位。默认值为3600秒。 |
apc.write_lock | 1(启用),0(禁用)。启用后可以避免多个进程同时缓存文件冲突。 |
php_apc.dll。php_apc.dll放入PHP的扩展目录。php.ini中添加以下配置:extension=php_apc.dllapc.rfc1867=1apc.max_file_size=100Mupload_max_filesize=100Mpost_max_size=100Mapc.enabled=1apc.shm_segments=1
apt-get install php-apc
echo 'extension=apc.so' >> /etc/php5/cgi/php.iniecho 'apc.enabled=1' >> /etc/php5/cgi/php.iniecho 'apc.shm_segments=1' >> /etc/php5/cgi/php.iniecho 'apc.shm_size=64M' >> /etc/php5/cgi/php.iniecho 'apc.optimization=1' >> /etc/php5/cgi/php.iniecho 'apc.num_files_hint=0' >> /etc/php5/cgi/php.iniecho 'apc.ttl=0' >> /etc/php5/cgi/php.iniecho 'apc.gc_ttl=3600' >> /etc/php5/cgi/php.iniecho 'apc.cache_by_default=on' >> /etc/php5/cgi/php.ini
/usr/local/php/sbin/php-fpm restart
initphp框架提供了一个APC缓存类,主要用于缓存操作。以下是该类的主要功能:
class apcInit { /** * @param string $key KEY值 * @param string $value 值 * @param int $time 缓存时间,默认为0表示永久缓存 */ public function set_cache($key, $value, $time = 0) { if ($time == 0) { $time = null; } return apc_store($key, $value, $time); } /** * @param string $key KEY值 * @return mixed */ public function get_cache($key) { return apc_fetch($key); } /** * @param string $key KEY值 * @return bool */ public function clear($key) { return apc_delete($key); } /** * @return bool */ public function clear_all() { apc_clear_cache('user'); return apc_clear_cache(); } /** * @param string $key KEY值 * @return bool */ public function exists($key) { return apc_exists($key); }} 该类提供了四种主要操作:设置缓存、获取缓存、清除缓存和清空所有缓存。通过这些方法,开发者可以方便地管理APC缓存。
转载地址:http://mdtfk.baihongyu.com/