基于php缓存的详解


Posted in PHP onMay 15, 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 disk_free_space 返回目录可用空间
May 10 PHP
php中常用的预定义变量小结
May 09 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 PHP
帝国cms常用标签汇总
Jul 06 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
PHP编程获取各个时间段具体时间的方法
May 26 PHP
php实现socket推送技术的示例
Dec 20 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 #PHP
深入php之规范编程命名小结
May 15 #PHP
PHP+jQuery实现自动补全功能源码
May 15 #PHP
深入分析php之面向对象
May 15 #PHP
深入解析php之apc
May 15 #PHP
深入解析php之sphinx
May 15 #PHP
基于php设计模式中单例模式的应用分析
May 15 #PHP
You might like
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
python中星号变量的几种特殊用法
2016/09/07 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
python定义具名元组实例操作
2021/02/28 Python
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
师范应届毕业生自荐信
2013/11/18 职场文书
委托书样本
2014/04/02 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
世界名著读书笔记
2015/06/25 职场文书
邓小平文选读书笔记
2015/06/29 职场文书
导游词之清晏园
2019/11/22 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫