PHP的缓存有很多种,包括输出缓冲(ob系列函数),opcode缓存(APC,eAccelerator,XCache等扩展实现),这些大家已经很熟悉了,接下来介绍一下一个不太被人注意的PHP缓存机制:realpath_cache。

介绍

require,require_once,include,include_once这四个语句(并非函数)大家经常会用到,如果用这类语句去包含文件 (相对路径)的话,那么PHP会去include_path所 指定的路径中去查找相关文件。一个应用中会存在大量的require_once语句调用,如果每次调用都去include_path中查找相应的文件,势 必会对应用的性能产生负面影响。为了避免这种负面效应产生的影响,PHPER们会使用文件的绝对路径来包含所需的文件,这样就减少了查询 include_path的次数。

其实,PHP自5.1.0起,就引入了RealpathCache。RealpathCache可以把PHP所用到文件的realpath进行缓存,以便PHP再使用这些文件的时候不需要再去include_path中查找,加快PHP的执行速度。

配置

realpath cache的配置项有两个,分别为realpath_cache_size和realpath_cache_ttl,可以在php.ini中进行修改:

; Determines the size of the realpath cache to be used by PHP. This value should

; be increased on systems where PHP opens many files to reflect the quantity of

; the file operations performed.

; http://php.net/realpath-cache-size

;realpath_cache_size = 16k

; Duration of time, in seconds for which to cache realpath information for a given

; file or directory. For systems with rarely changing files, consider increasing this

; value.

; http://php.net/realpath-cache-ttl

;realpath_cache_ttl = 120

其中realpath_cache_size指定了realpath cache的大小,默认为16k,如果你觉得这个容量太小,可以适当增加;realpath_cache_ttl指定了缓存的过期时间,默认为120秒, 对于不经常修改的生产环境来说,这个数字可以调整的更大些。

问题

由于realpath会 展开symlink(即软连接),所以如果你使用修改symlink目标这种方式发布应用的新版本的话,realpath cache会导致一些问题的出现:当你修改symlink使其指向一个新的release目录时候,由于realpath cache所缓存内容还没有过期,于是就会出现应用使用的还是旧的release,直到realpath cache所缓存内容过期失效为止(默认120秒),或者重启php-fpm。

看个例子:

基础环境:nginx + fastcgi + php-fpm

应用环境:/var/www/app是一个symlink,并做为document_root,在/var/www下存在version0.1,version0.2两个版本的release。初始情况下/var/www/app指向version0.1

lrwxr-xr-x 1 weizhifeng staff 10 10 22 16:41 app -> version0.1

drwxr-xr-x 3 weizhifeng staff 102 10 22 16:43 version0.1

drwxr-xr-x 3 weizhifeng staff 102 10 22 16:43 version0.2

version0.1,version0.2内部各有一个hello.php

[weizhifeng@Jeremys-Mac www]$ cat version0.1/hello.php

echo 'in version0.1';

?>

[weizhifeng@Jeremys-Mac www]$ cat version0.2/hello.php

echo 'in version0.2';

?>

nginx配置文件片段:

location / {

root /var/www/app; #app为symlink

index index.php index.html index.htm;

}

location ~ \.php$ {

root /var/www/app; #app为symlink

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi_params;

}

此时通过HTTP访问hello.php,得到的内容是’in version0.1′;修改/var/www/app,使其指向version0.2

[weizhifeng@Jeremys-Mac www]$ rm -f app && ln -s version0.2/ app

修改完成之后通过HTTP访问hello.php,得到的内容仍旧是”in version0.1″,可见是realpath cache在作祟了,此时你可以重启php-fpm或者等待120秒钟让realpath cache失效。

你可以使用clearstatcache来清 除realpath cache,但是这个只对当前调用clearstatcache函数的PHP进程有效,而其他的PHP进程还是无效,由于PHP进程池(php-fpm生 成,或者Apache在prefork模式下产生的N个httpd子进程)的存在,这个方法不是很适用。

php realpath 缓存,PHP的Realpath Cache相关推荐

  1. 域名缓存侦测(DNS Cache Snooping)技术

    域名缓存侦测(DNS Cache Snooping)技术 在企业网络中,通常都会配置DNS服务器,为网络内的主机提供域名解析服务.这些DNS不仅解析自己的私有域名,还会用递归方式,请求公网的DNS解析 ...

  2. 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  3. javax.cache_新的Java缓存标准(javax.cache)

    javax.cache 这篇文章探讨了新的Java缓存标准:javax.cache. 它如何适应Java生态系统 该标准由JSR107开发,作者是共同规范负责人. JSR107包含在JSR342开发的 ...

  4. 新的Java缓存标准(javax.cache)

    这篇文章探讨了新的Java缓存标准:javax.cache. 它如何适应Java生态系统 该标准由JSR107开发,作者是共同规范负责人. JSR107包含在JSR342开发的Java EE 7中. ...

  5. PHP常见缓存技术分析(cache)

    在大部份情况下我们的网站都会使用数据库作为站点数据存储的容器.当你执行一个SQL查询时,典型的处理过程 是:连接数据库->准备SQL查询->发送查询到数据库->取得数据库返回结果-& ...

  6. wordrpress静态缓存插件WP Super Cache 使用教程

    WordPress 静态缓存插件众多,孰优孰劣,这里不予评判,只说一说使用率比较高的静态缓存插件WP Super Cache的基本使用方法. 插件安装 进入WordPress后台 → 插件 → 安装插 ...

  7. 最佳 WordPress 静态缓存插件 WP Super Cache 安装和使用(转)

    WP Super Cache 是 WordPress 官方开发人员 Donncha开发,是当前最高效也是最灵活的 WordPress 静态缓存插件.它把整个网页直接生成 HTML 文件,这样 Web ...

  8. WordPress加速缓存插件WP Super cache安装方法及使用技巧

    当Wordpress博客的访问量逐渐升高时,如何加快Wordpress运行效率,减少服务器压力,提高Wordpress的访问速度,就成为了日益紧迫的事情了.话说Wordpress臃肿低效率的毛病在网上 ...

  9. colab清理gpu缓存_Maya2014全面使用手册_GPU 缓存首选项(GPU Cache Preferences)_软件教程_资源库...

    摘要:Maya2014全面使用手册_GPU 缓存首选项(GPU Cache Preferences)_软件教程_资源库 相关视频教程学习推荐: 造型设计<鹫>造型上色完整流程[实名认证] ...

最新文章

  1. 武汉一高中14名学生被剑桥牛津预录取!逻辑思路比结果更重要
  2. 灰色关联投影法python_python灰色关联算法(灰度关联算法)
  3. oracle,build path,linux
  4. WinDBG调试dNet程序总结
  5. win8 Windows 8 设置 默认浏览器
  6. Struts2工作原理和框架扩展点
  7. 2017-2018-1 Java演绎法 第三周 作业
  8. Mr.J--谈谈CSS和Html(font)
  9. 22.docker wait
  10. 好奇怪呀后面加什么标点_沙发位后面是窗户有什么好的方案?
  11. matlab 乱七八糟求最大值~
  12. SI4438系列模块调试
  13. 计算机软件期刊是不是中文核心,2020计算机测量与控制是什么期刊_计算机测量与控制是核心期刊吗_计算机测量与控制官网...
  14. 约束满足问题(CSPs)和规划问题(Planning)区别
  15. linux 网络配置 nm_controlled,LINUX centos7.6修改静态IP与配置参数NM_CONTROLLED
  16. JS,统计图表大全--十一、甘特图
  17. [ Arduino+Python ] 做一个串口屏,显示CPU使用率
  18. Python面向对象项目练习:彩票竞猜
  19. win10+黑苹果 单硬盘 双系统 超简单安装 一看就会
  20. 连续10年霸榜第一?程序员「最常用」的编程语言是它?

热门文章

  1. R语言(ggplot2绘图)
  2. 在华清远见学习嵌入式开发的总结
  3. 【UE4 第一人称射击游戏】08-使用“AK47”发射子弹
  4. ubuntu图形化软件包管理工具synaptic
  5. 【数学基础】参数估计之最大后验估计(Maximum A Posteriori,MAP)
  6. Linux 中Tomcat 服务器 启动项目,页面删除报错“该信息被其他信息引用”解决 (ORA-02292)
  7. Git 操作基础总结详细(Mas版+Win版)更新中,,,
  8. AVAIO流学习总结
  9. !! MACD战法总结
  10. 苹果手机中病毒显示无服务器,苹果手机中毒五大特征!一般认为这是正常现象,你的iPhone中了吗...