当前位置:生活小百科 >> 正文

缓存清理|Varnish代理缓存讲解

2018-11-08 10:21:20 来源: 责任编辑:生活小百科

篇一 : Varnish代理缓存讲解

一、varnish的基础知识

Varnish工作原理

 1、varnish工作原理

 客户端请求到达varnish代理,child线程中的accept接收下请求进程,交给worker threads处理,worker threads先去object expiry找缓存,没找到就去上游服务器backend lcatinon找到资源,返回varnish代理,查看是否符合缓存规则,符合则缓存,不符合则直接返回给客户端

2、缓存分类

  代理缓存:客户端请求代理,先去找缓存,缓存没有,代理会去上游服务器找到资源,并缓存在代理,然后返回给客户端

旁路缓存:客户端去缓存找缓存,缓存没命中返回客户端,客户端去上游服务器找到资源返回到本地,然后再把资源缓存到缓存

3、Memcache适用的场景

memcache的缺点:不能适应实时更新,如果实时更新,缓存不命中,命中率低。

(www.jianliw.com”

memcache支持分布式缓存,有mysql主从就不需要memcache,memcache适合多台mysql集群环境,此时直接到mysql缓存取查询性能较好

4、varnish各状态引擎的功用:

vcl_recv:实现安全策略,仅处理可以识别http方法,且只缓存get和head的方法,不缓存用户特有的数据(根据客户端的请求作出的缓存策略)

vcl_fetch:根据服务端的响应作出的策略缓存

vcl_pipe: 用于将请求直接发往后端主机;

vcl_hash: 自定义hash生成时的数据来源

vcl_pass: 用于将请求直接传递至后端主机;

vcl_hit: 从缓存中查找到缓存对象时要执行的操作;

vcl_miss: 从缓存中款查找到缓存对象时要执行的操作;

vcl_deliver: 将用户请求的内容响应给客户端时用到的方法;

vcl_error: 在varnish端合成错误响应时的缓存策略;

5、Varnish缓存的原理

------------------------------------------------------------

Varnish Cache 的架构笔记

CentOS5.8下Varnish-2.1.5的安装配置

RedHat脚本改用CentOS源更新安装Nginx、PHP 5.3、Varnish

利用Varnish构建Cache服务器笔记

缓存服务Varnish安装配置

Varnish 编译安装所需准备

Linux下Varnish缓存的配置优化

Varnish基础概念详解

-----------------------------------------------------------------------------------

二、varnish的实验

Node1 172.16.11.143 centos6.5+varnish

Node2 172.16.11.144 centos6.5+http

1、软件安装

http://repo.varnish-cache.org/redhat/varnish-3.0/el6/x86_64/varnish/

varnish-libs-3.0.5-1.el6.x86_64.rpm

varnish-3.0.5-1.el6.x86_64.rpm

varnish-docs-3.0.5-1.el6.x86_64.rpm

node1

rpm -ivh varnish-libs-3.0.5-1.el6.x86_64.rpm varnish-3.0.5-1.el6.x86_64.rpm

/etc/logrotate.d/varnish #滚动日志

/etc/rc.d/init.d/varnish #服务

/etc/rc.d/init.d/varnishlog #日志

/var/lib/varnish #共享缓存

/var/log/varnish #日志存放

/etc/varnish/default.vcl #配置文件

2、简单的代理配置

node1

VARNISH_LISTEN_PORT=80

VARNISH_STORAGE_SIZE=64M #设置缓存大小

#

# # Backend storage specification

#VARNISH_STORAGE="file,$《嫑犇》{VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}”

VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}" #缓存名字叫什么

Vim /etc/varnish/default.vcl

backend default {

 .host = "172.16.11.144";

 .port = "80";

}

Service varnish restart

Ss -tnl #查看端口是否监听

Node2

Yum install httpd -y

Vim /var/www/html/index.html

<h1>node2</h1>

Service httpd restart

Chkconfig --add httpd

Chkconfig httpd on

3、让后端服务器可以查看是那个客户端访问自己的

Node1

Cp /etc/varnish/default.vcl /etc/varnish/test.vcl

Vim /etc/varnish/test.vcl

sub vcl_recv {

  if (req.restarts == 0) {

    if (req.http.x-forwarded-for) {

      set req.http.X-Forwarded-For =

        req.http.X-Forwarded-For + ", " + client.ip;

    } else {

      set req.http.X-Forwarded-For = client.ip;

    }

  }

 return (lookup);

}

[root@localhost ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

varnish> vcl.list #查看哪些可用

200

active     2 boot

available   0 test1

varnish> vcl.load test1 test1.vcl #编译

200

VCL compiled.

varnish> vcl.use test1 #使用

200

varnish> vcl.list #查看具体可用

200

available   2 boot

active     0 test1

Node2

Vim //etc/httpd/conf/httpd.conf

LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

Service httpd reload

#####################################################################################

浏览器测试 http://172.16.11.143

Node2

tail /var/log/httpd/access_log

172.16.0.101 - - [04/Sep/2014:16:43:27 +0800] "GET /favicon.ico HTTP/1.1" 404 288 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"

4、设置查看是否命中缓存

Node1

Vim /etc/varnish/test.vcl

sub vcl_deliver {

    if (obj.hits > 0) {

        set resp.http.X-Cache = "Hit Via"+" "+ server.hostname;

    } else {

        set resp.http.X-Cache = "Miss Via"+" "+ server.hostname;

    }

return (deliver);

}

[root@localhost ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

varnish> vcl.load test2 test1.vcl

200

VCL compiled.

varnish> vcl.use test2

200

varnish> vcl.list

200

available   0 boot

available   2 test1

active     0 test2

浏览器访问F12查看

5、精确设置那个页面不用缓存

if (req.url ~”~/test.html$”) {

Return(pass)

}

编译使用

Vcl.load test3 test1.vcl

Vcl.use test2

Vcl.list

浏览器测试

变量使用规则

6、内置变量使用的在那个状态引擎中

7、Varnish内置变量:

请求到达时可用的内置变量:

req.url

req.request

req.http.HEADER

req.restarts: 请求被重启的次数;

server.ip

server.port

server.hostname

client.ip

req.backend

向后后端主机请求时可用的内置变量

bereq.url

bereq.request

bereq.http.HEADER

bereq.connect_timeout

bereq.proto

从后端主机获取到响应的object时可用的内置变量

beresp.status

beresp.response

beresp.http.HEADER

beresp.ttl

beresp.backend.name

beresp.backend.ip

beresp.backend.port

缓存对象进入缓存时可用的内置变量(只能用于vcl_hit或vcl_error,且大多为只读)

obj.status

obj.response

obj.ttl

obj.hits

obj.http.HEADER

响应给客户端时可用的内置变量

resp.proto

resp.status

resp.response

resp.http.HEADER

8、设置定义acl清除缓存

acl purgers {

    “127.0.0.1”;

    “192.168.0.0”/24; #定义那些可以来清除缓存

}

sub vcl_recv {

    if (req.request == “PURGE”) {

        if (!client.ip ~ purgers) {

            error 405 “Method not allowed”;

        } #判断ip是否为acl内的地址,不是的话就不用去寻找缓存

        return (lookup); #是acl里定义内的地址就去查找缓存

    }

}

#在hash下面设置miss 和hit

sub vcl_hit {

    if (req.request == “PURGE”) {

        purge;

        error 200 “Purged”;

    } #缓存命中给它个返回 error200

}

sub vcl_miss {

    if (req.request == “PURGE”) {

        purge;

        error 404 “Not in cache”;

    } #缓存没有命中给它个error404

}

#sub vcl_pass {

#   if (req.request == “PURGE”) {

#       error 502 “PURGE on a passed object”;

#   }

#}

#####################################################################################

再编译再测试

Curl -I

Curl -X PURGE  #指定修剪缓存命中

9、varnish 检测健康状态检测

.url 探测健康状态的请求url

.request 探测请求内容的格式

.window: 至少要检测多少次资源

.threshold: 至少要检测多少次资源从无到有或从有到无

.initial:varnish启动时对后端主机至少需要多少次成功探测,默认为threshold

.interval:探测请求发送的周期

.expected_response: 期望主机响应的状态码

.timeout : 每次探测请求的过期时长,默认为2秒

示例

在backend default 主机下面定义

backend default {

 .host = "172.16.11.144";

 .port = "80";

 .probe = {

    .url = "/index.html";

    .interval = 2s;

    .window = 8;

    .threshold = 2;

}

#####################################################################################

编译配置

Varnishstat

Backend.list #查看健康状态

我们可以去后端停掉http,在查看,开启,再查看

10、定义轮询

增加一个节点

node3 172.16.11.145CentOS6.5+http

backend web1 {

 .host = "172.16.11.144";

 .port = "80";

 .probe = {

    .url = "/index.html";

    .interval = 2s;

    .window = 8;

    .threshold = 2;

}

}

backend web2 {

 .host = "172.16.11.145";

 .port = "80";

 .probe = {

    .url = "/index.html";

    .interval = 2s;

    .window = 8;

    .threshold = 2;

}

}

director webservers round-robin {

    { .backend = web1; }

    { .backend = web2; }

}

#    return (pass);

#  }

  set req.backend = webservers;

  return (lookup);

}

[root@localhost ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

varnish> varnish> vcl.load test9 test1.vcl

200

VCL compiled.

varnish> vcl.use test9

200

varnish> backend.list

200

Backend name         Refs Admin   Probe

default(172.16.11.144,,80)  5   probe   Healthy (no probe)

web1(172.16.11.144,,80)    1   probe   Healthy 8/8

web2(172.16.11.145,,80)    1   probe   Healthy 8/8

也可以去网页测试

http://172.16.11.143

Varnish 的详细介绍:请点这里
Varnish 的下载地址:请点这里

本文永久更新链接地址

篇二 : IT之家iOS版1.60上架:自动清理缓存、评论显示修正

IT之家讯3月18日,IT之家iOS客户端再度迎来更新,全新IT之家v1.60版本新增自动清理缓存功能,应用退到后台后自动清理7天前缓存,轻松释放更多宝贵空间。(www.jianliw.com)

除此之外,IT之家v1.60还修正了评论页显示评论时遇到回车不能换行问题,评论阅读体验得以提升。VoiceOver下部分按钮朗读不正确、以及求评分窗口有时会同时弹出两个等问题也均得到修正,追求细节使用体验的完美绝不妥协。

全新版本绝对值得下载升级体验,强烈呼唤五星评论给予我们鼓励支持!

▲点击图片或扫描图片即可下载,更多软媒精彩APP请关注http://m.ruanmei.com/。

IT之家iOS客户端v1.60更新历史

新增:功能-iPhone/iPad版-添加自动清理缓存功能(应用退到后台时自动清理7天前缓存);
修正:界面-iPhone/iPad版-评论页显示评论时遇到回车不能换行问题;
修正:功能-iPhone/iPad版-修正VoiceOver下部分按钮朗读不正确问题;
修正:功能-iPhone/iPad版-修正求评分窗口有时会同时弹出两个的问题。

===产品介绍===

IT之家(www.ithome.com)是国内最知名的顶级科技媒体之一,拥有海量的读者访问。IT之家快速精选泛科技新闻、IT业界动态、潮流的数码产品资讯、前沿的科技创新趋势,提供给力的PC和手机技术文章、丰富的系统应用美化资源。爱IT,爱这里。

IT之家 iOS 版 最新下载:

IT之家全平台客户端下载:http://m.ithome.com/ithome/download/

WP7/WP8/WP10版|iPhone/iPad版|Win8.1/Win10版|安卓版

扩展:ipad清理缓存 / iphone清理缓存 / 微信清理缓存

篇三 : ecshop缓存清理-限制或禁用ECShop缓存

ECSHOP的缓存存放在templates/caches/文章夹下,时间长了这个文件夹就会非常庞大,拖慢网站速度。[www.jianliw.com)还有很多情况我们不需要他的缓存。本文介绍禁用ECSHOP缓存的方法。

ECSHOP的缓存有两部分,一部分是SMARTY的页面缓存;另一部分是SQL查询结果的缓存。这两部分都是保存在templates/caches/文件夹下。只要我们分别关闭这两个功能,就可以完全禁用ECSHOP的缓存。当然你也可以根据自己的需要关闭其中某一个。

1.关闭SMARTY的缓存:
打开includes/cls_template.php,找到下面一段

if (file_put_contents($this->cache_dir . ‘/’ . $cachename . ‘.php’, ‘<?php exit;?>’ . $data . $out) === false)
      {
          trigger_error(’can\’t write:’ . $this->cache_dir . ‘/’ . $cachename . ‘.php’);
      }

将这一部分注释掉即可,改成

/*
if (file_put_contents($this->cache_dir . ‘/’ . $cachename . ‘.php’, ‘<?php exit;?>’ . $data . $out) === false)
      {
          trigger_error(’can\’t write:’ . $this->cache_dir . ‘/’ . $cachename . ‘.php’);
      }
*/

2.关闭SQL查询结果缓存
打开includes/cls_mysql.php
找到
var $max_cache_time=3600;//最大的缓存时间,以秒为单位
改为
var $max_cache_time=0;//最大的缓存时间,以秒为单位

--------------------------------------------

如何限制或禁用ECShop缓存呢?按道理只要ftp登录到主机空间服务器,清除“templates/caches”文件夹下的缓存文件,但比较安全稳妥的办法是进入ecshop网店后台点击右上角“清除缓存”按钮。还是完全禁用ecshop的缓存功能。

一、禁用ecshop部分数据表缓存
ecshop里caches文件夹缓存文件包括sql查询结果缓存和SMARTY模板页面缓存。如果访问网站的用户一多,这些临时的缓存数据都被保持在ECshop的“templates/caches”文件夹下。数据缓存对提高网店速度有一定作用,但缓存文件一多也就过犹不及。有人说只对favourable_activity,goods_activity这2个表禁用缓存即可。
打开include/init.php,找到

PHP代码

        
  1. $db->set_disable_cache_tables(array($ecs->table(’sessions’), $ecs->table(’sessions_data’), $ecs->table(’cart’)));  

修改为

PHP代码

        
  1. $db->set_disable_cache_tables(array($ecs->table(’sessions’), $ecs->table(’sessions_data’), $ecs->table(’cart’), $ecs->table(’favourable_activity’), $ecs->table(’goods_activity’)));  

二、完全禁用ecshop缓存
定期要登录ecshop网店后台清除缓存文件,对于懒人来说,这也挺嫌麻烦的。那干脆完全禁用ecshop缓存吧。参考小虫的禁用echsop缓存文章,小虫的具体代码是2.6.0左右的版本。2.7的ecshop禁用缓存修改方法类似:

1. 用editplus打开include/cls_template.php,把下面代码注释掉:

PHP代码

        
  1. /* if (file_put_contents($hash_dir . ‘/’ . $cachename . ‘.php’, ‘<?php exit;?>’ . $data . $out, LOCK_EX) === false)    
  2.                         {    
  3.                             trigger_error(’can\’t write:’ . $hash_dir . ‘/’ . $cachename . ‘.php’);    
  4.                         } */  

2.用editplus打开include/cls_mysql.php,找到 max_cache_time = 300,把300改为0即可

三、templates/compiled下的文件是否可以清空?
templates/compiled下的文件是模板编译后文件,可以清空。当用户浏览网店后又会重新生成。templates文件夹下的主要是caches里缓存文件太多,你可以定期清空或完全禁用ecshop缓存。

----------------------------------------------

关于清除缓存的建议!!

发现现在的清除缓存做的比较粗!和之前没大变化啊!和2.0.5一样.
只要后台随便一个修改的操作,整个缓存就都没了!用的都是$smarty->clear_all_cache();
缺点:如果我有10万商品,:),而且都被浏览过,我后台一个操作就要清楚15万多缓存文件:)似乎极限了点
只是举例!!,希望ECSHOP更加完美而已!

smarty里面不是有这个函数么?
clear_cache(),我小修改了下,增加了可以指定删除某个目录下的缓存,用处是:可方便的删除商品的分类缓存!

2.0.5上我是这么改的,另外在根目录建立一个缓存目录templates_caches,里面建立article,article_cat,goods,goods_cat,4个文件夹分别放文章内容,文章列表,商品内容,商品列表的缓存
例子:对商品,文章部分的修改
前台init.php和后台init.php加入如下代码,我为了方便直接加在config.php里面了

  1. //缓存目录设置
  2. define('ECS_ROOT', substr(dirname(__FILE__), 0, -8));//前后台数字当然不一样了:)
  3. //文章缓存
  4. $cache_dir_article = ECS_ROOT.'./templates_caches/article';
  5. $cache_dir_article_cat = ECS_ROOT.'./templates_caches/article_cat';
  6. //商品缓存
  7. $cache_dir_goods = ECS_ROOT.'./templates_caches/goods';
  8. $cache_dir_goods_cat = ECS_ROOT.'./templates_caches/goods_cat';

复制代码

前台商品内容和分类缓存时间单独设置长一些,如内容一个月,分类1天
修改后台,商品单独修改的地方只删除这个商品内容的缓存
只要有修改操作就删除商品分类缓存和首页缓存!加入如下
$smarty->clear_cache(null, null, null, null, $cache_dir_goods_cat);//zouql:删除商品目录缓存,默认缓存时间
$smarty->clear_cache('goods.html', $goods_id, null, null, $cache_dir_goods);//zouql:删除商品缓存,默认缓存时间
还有广告管理等等等等等等等等地方要改!
前台用户发表评论后自动删除本商品缓存等等..........


function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null, $cache_dir = null)
{

     if (!isset($cache_dir))
$cache_dir = $this->cache_dir;
if (!isset($compile_id))
      $compile_id = $this->compile_id;

     if (!isset($tpl_file))
      $compile_id = null;

     $_auto_id = $this->_get_auto_id($cache_id, $compile_id);

     if (!empty($this->cache_handler_func)) {
      return call_user_func_array($this->cache_handler_func,
                    array('clear', &$this, &$dummy, $tpl_file, $cache_id, $compile_id, $exp_time));
     } else {
      $_params = array('auto_base' => $cache_dir,
                'auto_source' => $tpl_file,
                'auto_id' => $_auto_id,
                'exp_time' => $exp_time);
      require_once(SMARTY_CORE_DIR . 'core.rm_auto.php');
      return smarty_core_rm_auto($_params, $this);
     }

}

---------------------------------------------

定期清除缓存页面插件

软件类型:国产软件授权方式:共享软件界面语言:简体中文软件大小:未知文件类型:.rar运行环境:Win2003,WinXP,Win2000,Win9X软件等级:★★★★★发布时间:2009-08-26官方网址:http://演示网址:http://下载次数:47

软件介绍

利用ECSHOP的计划与任务清除过多的缓存页面文件
重要说明:
1.适用于utf-8编码;
2.原下载包内languages的路径有错误,正确的是:languages\zh_cn\cron\myclr.php

大家快出来列队欢迎 wutao0808 ,
wutao0808 的文件经测试 没有问题,不会破坏系统
我在此贴中做个备份,下面第一个为楼主的文件,清楚缓存,但不清除模板的编译  直接复制到商城的根目录下即可

下面的这个文件是我稍做修改 其中做了注释 ,默认为清除全部文件(包括缓存和模板编译 ),如果只需清楚缓存文件,注释掉

clear_all_files(); 改为 //clear_all_files();

将清除缓存的取消注释 //clear_cache_files(); 改为  //clear_cache_files(); 即可

篇四 : 越用越快!华为P10为你锁屏自动清理后台缓存

对于很多安卓手机用户来说,经常会面临手机配置本来挺不错但使用一段时间后就会出现变慢或卡顿的现象,而且耗电量也会越来越快。随着手机应用的越来越丰富,我们的手机里也会经常充满了各种APP呈现,大量APP应用会偷偷在后台运行并且占用CPU、内存等硬件资源,从而导致手机反应变慢或耗电量增加。

对于手机用户而言,每天都要清理内存真的相当的麻烦,要是能够自动清理内存该多好呀,其实这个问题已经有了解决办法。就拿日前刚刚在国内发布上市的华为P 10 系列旗舰手机来说,用户只需对相关应用进行设置即可完成后台应用的锁屏自动清理,再也不需要手动清理缓存内容。

首先只需要打开华为P 10 手机屏幕上的“手机管家”应用,进入界面后向左滑动页面至下一页,点击打开“锁屏清理应用”,选择想要清理的应用即可实现锁屏自动清理手机多余缓存。

进入锁屏清理应用界面可选择想要进行清理的APP程序滑动“开启”。当然用户也可以一键选择“全部清理”应用,但选择这项功能后在锁屏清理状态下可能让用户无法接收到新的消息,建议用户只选择想要清理的应用即可。

在选择需要清理的应用时,用户可选择对不经常使用的应用进行清理,比如微信等这些需要随时接收新消息的应用可在空闲时段选择清理。同时,用户还可以对一些高耗电量的应用进行清理,从而实现为手机节省电量。

设置完成后,用户只需对手机锁屏几分钟后系统就会自动清理多余缓存,让手机运行更流畅、续航更持久。

全新的华为P 10 系列手机运行的是基于Android 7. 0 深度定制的EMUI 5. 1 系统在加强内存管理优化的同时还支持实时碎片管理和自动内存回收等功能,提高了手机运行速度和响应速度。此外,EMUI 5. 1 还有人工智能管理系统,通过学习用户的使用习惯,然后有针对性地调配资源,为用户避免手机用久卡顿的问题。



>>返回 生活小百科 内容:http://www.jianliw.com/589013.html

文章很赞,分享给朋友
相关内容


月色入户欣然起行 钟汉良飞一般爱情小说 小说大纲范例 大明穿越小说排行 小说故事大纲怎么写 战天星45集电视剧本 datagridview选中行 contextmenustrip datagridview取消选中 李波儿微博

免责声明:本站作品均来自网友分享或互联网,若您发现本站存在您非授权的原创作品请第一时间联系本站删除,本站享有代替本站作者维权的权力。

CopyRight @ 2008-2018 jianliw.com 生活小百科,All Rights Reserved 版权所有

粤ICP备15014829号-1