快捷搜索:   nginx

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;
?>


顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论