php

位置:IT落伍者 >> php >> 浏览文章

深入Nginx + PHP 缓存详解


发布日期:2019年11月18日
 
深入Nginx + PHP 缓存详解
以下是对Nginx中的PHP缓存进行了详细的分析介绍需要的朋友可以参考下

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 /data/proxy_temp_dir;
#设置Web缓存区名称为cache_one内存缓存空间大小为MB天没有被访问的内容自动清除硬盘缓存空间大小为GB
proxy_cache_path /data/proxy_cache_dir levels=: keys_zone=cache_one:m inactive=d max_size=g;
server
{
listen ;
server_name wwwyourdomaincom ;
index indexhtml indexhtm;
root /data/htdocs/www;
location /
{
#如果后端的服务器返回执行超时等错误自动将请求转发到upstream负载均衡池中的另一台服务器实现故障转移
proxy_next_upstream http_ http_ error timeout invalid_header;
proxy_cache cache_one;
#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid h;
#以域名URI参数组合成Web缓存的Key值Nginx根据Key值哈希存储缓存内容到二级缓存目录内
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header XForwardedFor $remote_addr;
proxy_pass http://backend_server;
expires d;
}
#用于清除缓存假设一个URL为通过访问就可以清除该URL的缓存
location ~ /purge(/*)
{
#设置只允许指定的IP或IP段才可以清除URL缓存
allow ;
allow /;
deny all;
proxy_cache_purge cache_one $host$$is_args$args;
}
#扩展名以phpjspcgi结尾的动态应用程序不缓存
location ~ *(php|jsp|cgi)?$
{
proxy_set_header Host $host;
proxy_set_header XForwardedFor $remote_addr;
proxy_pass http://backend_server;
}
access_log off;
}
}


fastcgi_cache缓存设置

复制代码 代码如下:
#定义缓存存放的文件夹
fastcgi_cache_path /tt/cache levels=: keys_zone=NAME:m inactive=d max_size=G;
#定义缓存不同的url请求
fastcgi_cache_key "$scheme$request_method$host$uri$arg_filename$arg_x$arg_y";
server {
listen ;
server_name wwwexample com;
location / {
root /www;
index indexhtml indexhtm indexphp;
}
location ~ (|php)$ {
root /www;
fastcgi_pass :;
fastcgi_cache NAME;
fastcgi_cache_valid h;
fastcgi_cache_min_uses ;
fastcgi_cache_use_stale error timeout invalid_header http_;
fastcgi_index indexphp;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgiconf;
#设置缓存的过程中发现无法获取cookie经查需要定义这句话
fastcgi_pass_header SetCookie;
}
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 /
}


总的来说 nginx的proxy_cache和fastcgi_cache的缓存配置差不多

memcache缓存
在讨论memcache缓存之前我们先了解下mysql的内存缓存吧
mysql的内存缓存可以在mycnf中指定大小内存表和临时表不同临时表也是存放内存中临时表最大的内存需要通过tmp_table_size=M设定当数据查过临时表的最大值设定时自动转为磁盘表此时因需要进行IO操作性能会大大下降而内存表不会内存满了后会提示数据满错误

复制代码 代码如下:
create table test
(
id int unsigned not null auto_increment primary key
state char()
type char()
date char()
)engine=memory default charset=utf


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

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

               

上一篇:用php创建网页桌面快捷方式的代码

下一篇:隐藏apache和php的版本信息配置方法