博客
关于我
PHP之APC缓存详细介绍(转)
阅读量:792 次
发布时间:2023-03-01

本文共 3005 字,大约阅读时间需要 10 分钟。

APC缓存简介

APC(Alternative PHP Cache),又称PHP缓存,是一个用于优化PHP性能的开源框架。它通过缓存和优化PHP的中间代码,提高PHP应用的运行效率。APC的缓存分为两部分:系统缓存和用户数据缓存。

系统缓存

系统缓存是指APC将PHP文件源码编译后的中间代码缓存起来。当需要执行这些代码时,APC会先检查缓存的时间标记。如果未过期,则直接使用缓存中的中间代码运行。默认情况下,系统缓存的过期时间为3600秒(1小时)。然而,这样会浪费大量CPU时间。因此,建议在php.ini中设置apc.ttl=0,使系统缓存永不过期。这样可以节省服务器资源,但需要在修改PHP代码后重新启动WEB服务器才能确保缓存得到更新。

用户数据缓存

用户数据缓存允许开发者通过apc_storeapc_fetch函数来读取和写入数据。如果数据量较小,可以尝试使用APC缓存。如果数据量较大,建议使用Memcached等专门的内存缓存解决方案。

缓存Key生成规则

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常用的配置选项:

选项名称 选项值及说明
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_oncerequire_once的系统调用。
apc.optimization 0(禁用优化),1(启用优化)。默认值为1。
apc.num_files_hint 预估需要缓存的文件数量。设置0则不限制文件数量。
apc.ttl 缓存文件的过期时间,以秒为单位。默认值为3600秒。
apc.write_lock 1(启用),0(禁用)。启用后可以避免多个进程同时缓存文件冲突。

APC模块安装

在Windows上安装PHP-APC

  • 从PECL官网下载对应PHP版本的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
  • 重启WEB服务器。
  • 在Linux上安装PHP-APC

  • 使用包管理器安装PHP-APC:
    apt-get install php-apc
  • 修改PHP配置文件:
    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
  • 重启PHP-FPM:
    /usr/local/php/sbin/php-fpm restart
  • initphp框架之APC缓存类

    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/

    你可能感兴趣的文章
    parallels desktop for mac安装虚拟机 之parallelsdesktop密钥 以及 parallels desktop安装win10的办公推荐可以提高办公效率...
    查看>>
    paramiko模块
    查看>>
    param[:]=param-lr*param.grad/batch_size的理解
    查看>>
    Spring Cloud 之注册中心 EurekaServerAutoConfiguration源码分析
    查看>>
    ParseChat应用源码ios版
    查看>>
    Part 2异常和错误
    查看>>
    Spring @Async执行异步方法的简单使用
    查看>>
    PAT 1027 Colors in Mars
    查看>>
    PAT 1127 ZigZagging on a Tree[难]
    查看>>
    PAT 2-07. 素因子分解(20)
    查看>>
    PAT-1044. Shopping in Mars (25)
    查看>>
    PAT-乙级-1040 有几个PAT
    查看>>
    PAT1093 Count PAT's (25)(逻辑题)
    查看>>
    PATA1038题解(需复习)
    查看>>
    Patching Array
    查看>>
    Path does not chain with any of the trust anchors
    查看>>
    Path形状获取字符串型变量数据
    查看>>
    PAT甲级——1001 A+B Format (20分)
    查看>>
    Skywalking原理
    查看>>
    PAT甲级——1006 Sign In and Sign Out (25分)
    查看>>