深入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 相关文章推荐
php中数据的批量导入(csv文件)
Oct 09 PHP
phpmail类发送邮件函数代码
Feb 20 PHP
php学习笔记之面向对象编程
Dec 29 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
php去除html标记的原生函数详解
Jan 27 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
Apr 16 PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 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
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
js通过classname来获取元素的方法
2016/11/24 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
vue实现评论列表功能
2019/10/25 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
大学自荐信
2013/12/12 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
小学生期末评语
2014/04/21 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
家电创业计划书
2019/08/05 职场文书
Python的三个重要函数详解
2022/01/18 Python
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL