深入Nginx + PHP 缓存详解


Posted in PHP onJuly 11, 2013

Nginx缓存
nginx有两种缓存机制:fastcgi_cache和proxy_cache
下面我们来说说这两种缓存机制的区别吧
proxy_cache
作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态的
fastcgi_cache作用是缓存fastcgi生成的内容,很多情况是php生成的动态内容
proxy_cache缓存减少了nginx与后端通信的次数,节省了传输时间和后端带宽
fastcgi_cache缓存减少了nginx与php的通信次数,更减轻了php和数据库的压力。
proxy_cache缓存设置

#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path /data0/proxy_temp_dir;
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
server
{
listen 80;
server_name www.yourdomain.com 192.168.8.42;
index index.html index.htm;
root /data0/htdocs/www;
location /
{
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_cache cache_one;
#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid 200 304 12h;
#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server;
expires 1d;
}
#用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。
location ~ /purge(/.*)
{
#设置只允许指定的IP或IP段才可以清除URL缓存。
allow 127.0.0.1;
allow 192.168.0.0/16;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
#扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
location ~ .*\.(php|jsp|cgi)?$
{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server;
}
access_log off;
}
}

fastcgi_cache缓存设置
#定义缓存存放的文件夹
fastcgi_cache_path /tt/cache levels=1:2 keys_zone=NAME:2880m inactive=2d max_size=10G;
#定义缓存不同的url请求
fastcgi_cache_key "$scheme$request_method$host$uri$arg_filename$arg_x$arg_y";
server {
listen 8080;
server_name www.example .com;
location / {
root /www;
index index.html index.htm index.php;
}
location ~ (|.php)$ {
root /www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_cache NAME;
fastcgi_cache_valid 200 48h;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
#设置缓存的过程中发现无法获取cookie,经查需要定义这句话
fastcgi_pass_header Set-Cookie;
}
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /httplogs/access.log access;
}

总的来说 nginx的proxy_cache和fastcgi_cache的缓存配置差不多。
--------------------------------------------------------------------------------
memcache缓存
在讨论memcache缓存之前,我们先了解下mysql的内存缓存吧
mysql的内存缓存可以在my.cnf中指定大小:内存表和临时表不同,临时表也是存放内存中,临时表最大的内存需要通过tmp_table_size=128M设定。当数据查过临时表的最大值设定时,自动转为磁盘表,此时因需要进行IO操作,性能会大大下降,而内存表不会,内存满了后,会提示数据满错误。
例:
create table test
(
id int unsigned not null auto_increment primary key
state char(10),
type char(20),
date char(30)
)engine=memory default charset=utf8

内存表的特性:
1.内存表的表定义存放在磁盘上,扩展名为.frm,所以重启不会丢失
2.内存表的数据是存放在内存中,重启会丢失数据
3.内存表使用一个固定的长度格式
4.内存表不支持blob或text列,比如varchar与text字段就不会被支持
5.内存表支持auto_increment列和对可包含null值的列的索引
6.内存表不支持事物
7.内存表是表锁,当修改频繁时,性能可能会下降

下面我们来看看memcache,相对而言mysql的内存表限制较多。
memcache的用途
1.提高系统的并发能力
2.减轻数据库的负担
注:memcache linux系统32位只支持4G内存,同时memcache最长保存时间为30天。

PHP 相关文章推荐
Notice: Undefined index: page in E:\PHP\test.php on line 14
Nov 02 PHP
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
PHP页面间参数传递的四种方法详解
Jun 09 PHP
PHP使用SOAP调用.net的WebService数据
Nov 12 PHP
ThinkPHP中ajax使用实例教程
Aug 22 PHP
Yii分页用法实例详解
Dec 04 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
PHP实现的装箱算法示例
Jun 23 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
基于PHP中的常用函数回顾
Jul 11 #PHP
PHP 获取文件权限函数介绍
Jul 11 #PHP
浅析php学习的路线图
Jul 10 #PHP
php对图像的各种处理函数代码小结
Jul 08 #PHP
php/js获取客户端mac地址的实现代码
Jul 08 #PHP
关于PHP语言构造器介绍
Jul 08 #PHP
php5.5新数组函数array_column使用
Jul 08 #PHP
You might like
isset和empty的区别
2007/01/15 PHP
请php正则走开
2008/03/15 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
vue-cli3+typescript初体验小结
2019/02/28 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
Python实现的批量下载RFC文档
2015/03/10 Python
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
python3中str(字符串)的使用教程
2017/03/23 Python
python编程实现归并排序
2017/04/14 Python
单利模式及python实现方式详解
2018/03/20 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python使用matplotlib绘制热图
2018/11/07 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
银行工作检查书范文
2014/01/31 职场文书
市场策划求职信
2014/08/07 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书