PHP 缓存OPcache检查文件更新注意项
一、场景说明
通常使用opcache缓存时,会设置是否检查文件已经更新。
validate_timestamps
设置是否检查文件更新。
revalidate_freq
设置检查文件更新频率。
二、接受到请求后的处理
如果文件内容没有被缓存;应该处理后添加到缓存中。
如果文件内容已经缓存了;应该检查文件是否已经更新。
如果文件已缓存,并在revalidate_freq
秒内检查过更新;则应该直接返回缓存。
三、判断文件更新
php接受到请求后,会获取硬盘存储的文件的修改时间;然后和缓存中的文件缓存时间相比较。
如果文件的修改时间大于缓存中的时间;则要更新缓存信息。
当修改服务器时间后,则会打乱opcache缓存判断文件更新的依据。
如果将时间后退了10分钟,则要过10分钟,等时间赶上后;检查文件更新的机制才会有效。
四、问题环境
开发环境中,因为工作需要将服务器的时间修改为昨天。就发生了修改文件后,在页面上不起效果。
经过排查发现:
在终端直接执行脚本文件,修改文件可以生效。
在终端使用CURL发送请求,修改文件不生效。
重启php-fpm后,就可以了。
所以使用opcache缓存时,切记要注意服务器时间调整。