php 加速、提高并发opcache

php 缓存 opcache 编程技术
发布日期 2023-09-05 更新日期 2023-09-05 阅读次数 197 文章字数 1.2k

opcache是php官方的一款加速php脚本扩展,免费使用但不开源

php脚本编译后生成的机器码,叫做opcode,如果代码不改变则每次执行时生成的opcode应该是一样的,如果使用这个opcode而不需要重新编译是否更快呢?答案是显然的,这就是opcache的原理

安装opcache扩展后,一般配置文件如下:

[Zend Opcache]
zend_extension=/www/server/php/80/lib/php/extensions/no-debug-non-zts-20200930/opcache.so
opcache.enable = 1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=1000000
opcache.revalidate_freq=3
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.jit_buffer_size=128m
opcache.jit=1205

max_accelerated_files 指最多能缓存100万个文件

memory_consumption 最大缓存内存512mb

revalidate_freq 是指3秒自动刷新一次缓存,如果每次都刷新则设置为0,又或者永不刷新,则设置一个额外的值:opcache.validate_timestamps=0,当validate_timestamps为1时才会每隔一段时间刷新一次缓存,这个值设置3秒可用兼容开发和生成环境都足够使用了

在php里操作opcache?

opcache_compile_file($php_file); #预生成opcode缓存

opcache_is_script_cached($php_file) #查看是否生成opcode缓存

opcache_invalidate($php_file, true) #清除单个缓存

opcache_reset(); #清空缓存

opcache_get_status(); #获取缓存的状态信息

opcache_get_configuration(); #获取缓存的配置信息

一般情况下,我们可以先判断opcache是否加载了

var_dump(extension_loaded("Zend Opcache"));  //判断opcache扩展

或者直接判断特定函数

function_exists("opcache_reset")

清空指定文件,或者更保险一点清空所有缓存

if(function_exists("opcache_reset")){
    if(opcache_get_configuration()['directives']['opcache.enable']){
        opcache_reset();
    }
}

另外值得一提的是,根据opcache原理,第一次读取,肯定不是缓存,所有新增文件无论何时新增第一次肯定能正常读取的,如果修改文件则要清空缓存否则容易异常。

根据这个原理,每次新增脚本,是不需要刷新的,修改大量文件则直接reset整个缓存比较保险。


文章作者: 朱丰华

文章链接: https://smart.52dixiaowo.com/blog/post-490.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。

php 缓存 opcache

发表评论

相关推荐
朱丰华   |   7个月前   |   git

git从缓存中移除数据git rm --cached

406    评论    点赞
朱丰华   |   7个月前   |   php

php判断是否被iframe

220    评论    点赞
朱丰华   |   1年前   |   php

php正则表达式定界符:异常Delimiter must not be alphanumeric or backslash

189    评论    点赞
朱丰华   |   1年前   |   git · hub · 仓库

go克隆并引用github仓库

146    评论    点赞
朱丰华   |   1年前   |   正则 · 表达

正则表达式,实现if...then...else

112    评论    点赞
朱丰华   |   1年前   |   sql · php

PHP如何使用PDO批量执行SQL?

114    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 字符串

如何在 PHP 中将字符串的第一个字母转换为大写

148    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 正则

php正则表达式原生字符

85    评论    点赞
朱丰华   |   1年前   |   字符 · php · 比较

PHP比较字符串大小相关函数

110    评论    点赞
朱丰华   |   1年前   |   php

windows下编写、编译php扩展

157    评论    点赞
朱丰华   |   1年前   |   linux · php

linux下编写、编译php扩展

149    评论    点赞
朱丰华   |   1年前   |   php · 混淆 · obfuscate · git

yakpro-po混淆php代码

105    评论    点赞
朱丰华   |   1年前   |   php

php扩展编译nts的方法

85    评论    点赞
朱丰华   |   1年前   |   js · 模块 · nodejs

nodejs引入自定义模块

47    评论    点赞
朱丰华   |   1年前   |   js · php · 字符 · 字符串

php json_encode对字符串转义用法

134    评论    点赞
朱丰华   |   1年前   |   php · 捕获

php Fatal error怎么捕获

126    评论    点赞
朱丰华   |   1年前   |   php · 编译

ubuntu、centos系统从源码编译指定版本php--超详细

158    评论    点赞
朱丰华   |   1年前   |   php · git · 编译

从源码编译php

134    评论    点赞
朱丰华   |   1年前   |   php · zend · 反射 · api

php zend引擎api接口:ZENDAPI阅读,反射调用示例

122    评论    点赞
朱丰华   |   1年前   |   php · 引用 · 变量 · c语言

php扩展内存管理与引用计数

126    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞