PHP编程中使用OPCACHE函数来调用清理缓存 PHP OPCACHE优化方案
OPCACHE是PHP官方提供的缓存解决方案,由于是官方的因此稳定性更好。而且提供了函数接口,可以让程序支持清理指定文件的缓存,用来显示需要实时更新的文件。
首先我们来讲下OPCACHE的几个优化设置项
首先看一段配置
[Zend Opcache] zend_extension=/www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/opcache.so opcache.enable = 1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
以上来自安装好opcache的php.ini的默认设置
[opcache]
opcache.enable=1; 启动OPCACHE缓存
opcache.enable_cli=1; 针对支持CLI版本PHP启动OPCACHE缓存 一般被用来测试和调试
opcache.memory_consumption=128; 共享内存大小,单位为MB
opcache.interned_strings_buffer=8 ;存储临时字符串缓存大小,单位为MB,PHP5.3.0以前会忽略此项配置
opcache.max_accelerated_files=4000; 缓存文件数最大限制,命中率不到100%,可以试着提高这个值
opcache.revalidate_freq=60 ; 一定时间内检查文件的修改时间, 这里设置检查的时间周期, 默认为 60, 单位为秒,提高缓存时间可以提升速度,但需要配合PHP代码,在必要的时候清除缓存
opcache.fast_shutdown=1; 开启快速停止续发事件,依赖于Zend引擎的内存管理模块,一次释放全部请求变量的内存,而不是依次释放内存块
opcache.enable_file_override=1;启用检查 PHP 脚本存在性和可读性的功能,无论文件是否已经被缓存,都会检查操作码缓存,可以提升性能。 但是如果禁用了 opcache.validate_timestamps选项, 可能存在返回过时数据的风险。
zend_extension=/www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/opcache.so; 拓展库so文件关联加载
接下来进入正题,OPCACHE配合PHP的编程使用
Opcache安装后,提供了以下几个主要函数,可以在PHP代码中直接使用:
1、opcache_get_configuration;
形式:array opcache_get_configuration(void);
获取设置的缓存配置信息,以数组形式返回配置信息、黑名单及版本号。
2、opcache_get_status;
形式:array opcache_get_status(void);
获取设置的缓存状态信息。
3、opcache_invalidate;
形式:boolean opcache_invalidate (string);
该函数的作用是使得指定脚本的字节码缓存失效。如果force 没有设置或者传入的是 FALSE,那么只有当脚本的修改时间 比对应字节码的时间更新,脚本的缓存才会失效。
4、opcache_reset;
形式:boolean opcache_reset(void);
该函数将重置整个字节码缓存。在调用 opcache_reset() 之后,所有的脚本将会重新载入并且在下次被点击的时候重新解析。
5、opcache_compile_file;
形式:boolean opcache_compile_file (string);
无需运行,就可以编译并缓存脚本。
6、opcache_is_script_cached
形式:boolean opcache_is_script_cached (string);
判断某个脚本是否已经缓存到Opcache。
用法参考以下
<?php function opcacherefresh($switch,$filename){ if (function_exists('opcache_get_status')) { $opcache_get_status = opcache_get_status(); print_r($opcache_get_status); if($opcache_get_status['opcache_enabled'] =='1'){$status.="OP缓存启用,";}else{$status.="OP缓存未启用,";} if($switch==='yes'){opcache_invalidate($filename, true);$status.= '缓存已更新';}else{$status.= '使用缓存';} return $status; } } /*if (function_exists('opcache_get_configuration')) { $a = opcache_get_configuration(); print_r($a); } */ $switch = $_GET['switch']; $filename=dirname(__FILE__); echo $filename; $opcacheout= opcacherefresh($switch,$filename); echo $opcacheout; ?>
- 最新评论