PHP 缓存OPcache检查文件更新注意项

2018-02-22 0 By admin

一、场景说明

通常使用opcache缓存时,会设置是否检查文件已经更新。
validate_timestamps 设置是否检查文件更新。
revalidate_freq 设置检查文件更新频率。

二、接受到请求后的处理

如果文件内容没有被缓存;应该处理后添加到缓存中。
如果文件内容已经缓存了;应该检查文件是否已经更新。
如果文件已缓存,并在revalidate_freq秒内检查过更新;则应该直接返回缓存。

三、判断文件更新

php接受到请求后,会获取硬盘存储的文件的修改时间;然后和缓存中的文件缓存时间相比较。
如果文件的修改时间大于缓存中的时间;则要更新缓存信息。
当修改服务器时间后,则会打乱opcache缓存判断文件更新的依据。
如果将时间后退了10分钟,则要过10分钟,等时间赶上后;检查文件更新的机制才会有效。

四、问题环境

开发环境中,因为工作需要将服务器的时间修改为昨天。就发生了修改文件后,在页面上不起效果。
经过排查发现:
在终端直接执行脚本文件,修改文件可以生效。
在终端使用CURL发送请求,修改文件不生效。
重启php-fpm后,就可以了。
所以使用opcache缓存时,切记要注意服务器时间调整。