php的apc扩展浅析(二)
apc参数比较多,下面就几个比较常用的参数做下说明:
1 apc.cache_by_default和apc.filters:apc.cache_by_default,是否开启系统缓存,通常跟apc.filters结合使用,用来控制需要进行缓存和不需要缓存的php文件。apc.filters参数的值是一个以逗号分隔的 POSIX 扩展正则表达式的列表,如果正则表达式的第一个字符为+,则匹配的文件都会被缓存,如果为-,则匹配的文件都不会被缓存。
demo1:关闭系统缓存,仅缓存以a和b开头的文件,其他文件不会被缓存
apc.cache_by_default = 0 apc.filters=+a.*.php,+b.*.php
demo2:开启系统缓存,不缓存以a和b开头的文件,其他文件将会被缓存
apc.cache_by_default = 1 apc.filters = -a.*.php,-b.*.php
2 apc.shm_size和apc.shm_segments:apc.shm_size,以 MB 为单位的每个共享内存块的大小。系统缓存和用户缓存共用,可以通过调整该值来改变apc的共享内存块的大小。如果apc.shm_size的值已经设置为系统所能达到的最大值仍然不够用的时候,我们就需要借助apc.shm_segments,该选项的含义为编译器缓存要分配的共享内存块的数目,我们可以通过调整该值来改变共享内存块的数目(但是在测试的时候,该选项并未生效)。
3 apc.stat:用于检测脚本是否更新,默认开启,每次请求脚本的时候都检测脚本是否更新,这样做对性能有不利的影响,如果生产环境中的脚本文件并非频繁更新,我们可以关闭它,这样性能将会大幅提高,缺点就是脚本更新的时候需要重启web服务器(如果是nginx,重启php-fpm)使之生效。
4 apc.ttl和apc.user_ttl:缓存条目在缓冲区允许逗留的秒数。不同之处在于,apc.ttl针对的是系统缓存,apc.user_ttl针对的是用户缓存。测试的时候这两个选项并没有很好的表现,例如设置值为10,按理说10秒如果没有访问缓存条目,这些缓存条目将会被清除,但是10秒过后这些条目却仍然存在,并没有被清除。
5 apc.num_files_hint和apc.user_entries_hint:Web 服务器上的被包含或被请求的不同源文件的数目的大概估计,apc.num_files_hint针对系统缓存,apc.user_entries_hint针对用户缓存。跟缓存时间一样,缓存数量好像也没什么作用,例如数量设置为3,超过3个文件仍会被缓存,不知道为什么。
其他的参数不再做过多的介绍,关于缓存时间和缓存数量或许是打开方式不对,总是不能得到预期的效果,如果有哪位对这几个参数有深入的理解和研究,希望不吝赐教。
小结:
1 apc的官方手册中明确说明,apc有两个主要的配置选项,一个是分配多少内存给apc(选项apc.shm_size),一个是每次请求apc是否检查文件修改(选项apc.stat),可见这两个选项对于apc来说至关重要,有时间可以重点研究下这两项。
2 apc.cache_by_default开启和关闭仅会影响到系统缓存,对于用户缓存无影响。
3 apc的共享内存块是系统缓存和用户缓存共用的。
4 apc 3.1.15-dev版本,php 5.5.10,操作系统centos6.5,设置apc.shm_segments的时候并未生效。
5 apc缓存满的情况下系统缓存和用户缓存表现不同,如果是系统缓存文件在请求的时候达到了缓存上限,则apc会清除除了该请求的所有其他系统缓存文件,如果是用户缓存变量在请求的时候达到了缓存上限,则会清除除了该请求变量外的所有其他用户缓存变量,也就是说系统缓存和用户缓存之间不会相互影响。
以上就介绍了php的apc扩展浅析(二),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。