- 浏览: 445573 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (369)
- javascript html (20)
- java (31)
- jquery (15)
- jcrop (0)
- JEECG (1)
- ajax (3)
- 反射 (3)
- VI (1)
- mysql (48)
- easyui (1)
- svn (2)
- MD5 加密 (1)
- spring (14)
- ORACLE (8)
- 经验总结 (1)
- TCP/IP协议 (1)
- ICMP协议 (1)
- eclipse (1)
- Reflect (1)
- linux (21)
- android (5)
- excel 操作 (1)
- java tree (1)
- html (1)
- plupload (1)
- mongodb (9)
- aes (1)
- python (1)
- java relax (1)
- highcharts (2)
- json (2)
- java 多线程 (30)
- maven (2)
- 设计模式 (1)
- jsp+js (2)
- 面向对象 (1)
- jvm (16)
- 缓存 (1)
- proxy (1)
- 聊侃 (1)
- 面经 (1)
- java 字节 (1)
- java 类加载器 (2)
- java 基础 (2)
- java 语法糖 (1)
- java 位运算 (1)
- 排序 (3)
- java 服务器性能优化 (19)
- 网络编程 (2)
- jvm 参数设置 (0)
- jersey (1)
- webservice (2)
- nginx+多tomcat 集成 (5)
- nginx (16)
- squid (3)
- memcached (5)
- 正则表达式 (1)
- 常用免费接口 (1)
- jpa (1)
- win7 (1)
- java处理大文件 (1)
- js正则表达式 (1)
- tomcat (1)
- java 敏感字 (1)
- 系统架构优化 (4)
- 学习 (1)
- 本地测试QQ微博第三方登陆 (1)
- java 错误 (1)
- 微信支付 (1)
- https (1)
- httpclient (1)
- awk (2)
- loadrunner (1)
- sql server 2008 (3)
- git (4)
- sql server2008 (1)
- solr (2)
- centos (1)
- 数据存储架构 (3)
- log4j (1)
- weboffice (1)
- 并发编程 (1)
- postgreSQL (0)
- ssl (1)
- openssl (1)
- activeMQ (2)
- IDEA (1)
- shell (1)
- ansible (4)
- docker (2)
- grafana (1)
- jmeter (1)
- TLS (1)
- 将博客搬至CSDN (1)
最新评论
-
dida1990:
啊喔,过去了这么久,不过还是评一个。谁说uuid的hashCo ...
高并发生成订单号(二) -
annan211:
yclovesun 写道使用了uuid,为什么还要machin ...
高并发生成订单号(二) -
yclovesun:
使用了uuid,为什么还要machineId?uuid已经可以 ...
高并发生成订单号(二) -
u013280917:
太深奥,看不懂
mysql优化特定类型的查询
squid 缓存疑问 问题归纳:
1 squid 缓存的数据,何时过期,如何判断缓存的数据已经过期,如何把最新的数据缓入squid 并且替换掉旧的内容
2 如何判断数据是否应该被缓存
3 校验失败时,是否给出缓存中旧的内容
上面的几个问题 都可以通过 squid中的 refresh_pattern 配置项 找到答案。
答案简单归纳如下
1 何时过期 要根据配置选项
squid 配置项 refresh_pattern [-i] regex min percent max [options]
这个配置项中 min 和 max 是针对请求停留在cache中的时间设置的,
min 参数是分钟数量,它是过时响应的最低时间限制。
如果某个响应驻留在cache里的时间没有超过这个最低限制,
那么它不会过期。同样max 参数是存活响应的最高时间限制。
如果某个响应驻留在cache里的时间高于这个最高限制,那么它必须被刷新
min max 并不是精确控制参数,如果需要精确控制 可以使用 percent
percent 会计算得出一个时间 以首页index.html为例,假设 有效期为 7分钟,
在 3:00缓入squid, 如果在这段有效期内,有改变则把最新的index.html返还给squid ,
而squid 收到会更新缓存,然后把新的index.html 返还给客户端,
同时根据新页面中的Last_Modified 和取页面的时间,重新计算resource age,同样也重新计算存活时间
如果没有改变的话 7分钟过后,首页过期,如果这段时间没有index.html的请求,
index.html会一直缓存中,如果有index.html 请求,squid收到请求后,
由于已经过期,squid 会像源服务器发一个index.html是否有改变的请求,
如果源服务器收到请求后,如果index.html没有更新,squid就不用缓存,
直接会把缓存中的内容给客户端;同时,重置对象进入cache的时间为源服务器确认的时间。
2 一个object的header部分被squid得到之后,是要判断一下,这个object在过期校验层面上,
是否适合被缓存。如果不适合(要校验一个object主要有2种手段,If-Modified-Since和If-None-Match,
一个需要Last-Modified头,一个需要ETag头。这两个头如果都没有的话,object也是不能缓存的。),
将直接不缓存这个object。
如果 过期时间 大于 配置文件中的minimum_expiry_time这个配置项 则会缓存,否则不会缓存。
3 检查当回源校验失败时,是否能将已经过期的object给出去。如果一次回源校验,
原站给出了一个5xx的话,squid为了能让客户端继续拿到内容,可能会将磁盘上的旧内容发给客户端,
但要有一定的条件,即检查object是否已经“严重过期”。
squid 配置文件中有 refresh_pattern 配置项
refresh_pattern最主要的作用,过期校验
Squid的过期校验是访问驱动的,如果一个object过期了,却又一直没人访问,
那么squid会一直把这个object扔在那里,而不会主动地回源校验它。
只有当客户端访问到了这个object的时候,squid才会校验。
先介绍一下refresh_pattern的配置方法:
refresh_pattern [-i] regex min percent max [options]
-i表示正则匹配时不区分大小写 - i 选项是忽略大小写,
regex是与url进行匹配的正则表达式
min,percent,max 是3个数字,min, max的单位是分钟,percent就是百分比。
min 参数是分钟数量,它是过时响应的最低时间限制。
如果某个响应驻留在cache里的时间没有超过这个最低限制,
那么它不会过期。同样max 参数是存活响应的最高时间限制。
如果某个响应驻留在cache里的时间高于这个最高限制,那么它必须被刷新
options是refresh_pattern的其他选项,包括以下几种
override-expire
override-lastmod
reload-into-ims
ignore-reload
ignore-no-cache
ignore-private
ignore-auth
stale-while-revalidate=NN
ignore-stale-while-revalidate
max-stale=NN
negative-ttl=NN
refresh_pattern 算法解析如下
squid的refresh_pattern 算法的简单描述
1 如果响应年龄超过refresh_pattern 的max值,该响应过期;
2 如果LM-factor 少于refresh_pattern 的percent的值。该响应存活
3 如果响应年龄少于refresh_pattern 的min值,该响应存活
4 其他情况,响应过期
Refresh_pattern percent 计算方法
Resource age=对象进入cache的时间 – 对象的last_modified
Response age= 当前时间 – 对象进入cache的时间
LM-factor =(response age)/(resource age )
Date一般是Squid从后面取页面的时间,Last-Modified 一般是页面生成时间。
(当前时间定义为CURRENT_DATE)
1) If ((CURRENT_DATE-DATE(就是LM里定义的时间)) < min),cache是新鲜的
2) else if ((CURRENT_DATE-DATE) < (min + (max-min)*percent),cache是新鲜的
3) else cache是过期的
如果希望页面一进入cache就不删除,直到被主动purge掉为止,可以加上ignore-reload选项
该项常用在mp3,wma,wmv,gif 之类
一般情况可以使用 reload-into-ims。
举例:
refresh_pattern -i \.gif$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.jpg$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.png$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.mp3$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.wmv$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.rm$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.swf$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.mpeg$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.wma$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.css$ 10 50% 60 reload-into-ims
refresh_pattern -i \.js$ 10 50% 60 reload-into-ims
refresh_pattern -i \.xml$ 10 50% 30 reload-into-ims
举个例子解析 refresh_pattern 的配置项
refresh_pattern 20%
假如源服务器上www.aaa.com/index.html - --lastmodified 是2007-04-10 02:00:00
Squid 上的proxy.aaa.com/index.html index.html存入cache的时间2007-04-10 03:00:00
1 如果当前时间 2007-04-10 03:00:00
Resource age =3点 – 2点 =60分钟
Response age =0 分钟
Index.html 还可以在cache 中停留的时间(resource age)*20%= 12 分钟,换句话说,
index.html 进入cache后,可以停留十二分钟,才被重新载入
2 如果当前时间是 2007-04-10 03:05:00
Resource age =3点 – 2点 =60 分钟
Response age=5 分钟
Index.html 还可以在cache中停留的时间
( resource age)*20%=12 分钟-5=7分钟
LM-factor=5/60 =8.3% <20%
3 所有说2007-04-10 03:12:00 LM-factor=12/60=20% 之后,
cache中的页面index.html 终于stale,如果这段时间没有index.html的请求,
index.html会一直缓存中,如果有index.html 请求,squid收到请求后,
由于已经过期,squid 会像源服务器发一个index.html是否有改变的请求,
如果源服务器收到请求后,如果index.html没有更新,squid就不用缓存,
直接会把缓存中的内容给客户端;同时,重置对象进入cache的时间为源服务器确认的时间。
比如2007-04-10 03:13:00 ,如果正好在这个后重新确认了页面。重置后,resource age 变长,
相应在cache中的cache中存活的时间也同样变长
如果有改变则把最新的index.html返还给squid ,而squid 收到会更新缓存,
然后把新的index.html 返还给客户端,同时根据新页面中的Last_Modified 和取页面的时间,
重新计算resource age,同样也重新计算存活时间
实际上,一个对象进入cache后,同样他的存活时间就确定了,即(resource age)* percent ,
直到被重新确认
发表评论
-
nginx stream 模块的应用
2019-08-28 10:17 708nginx 作为反向代理服务器,通常以7层网络代理为主 , ... -
docker 运行nginx 挂载本地目录
2018-05-31 10:32 949docker run --name nginx83 -d ... -
nginx MQ 负载均衡
2017-11-29 19:14 934要求 : 1 nginx 1.9版本以上。 2 opens ... -
spymemcached客户端 出现节点宕机不能正常写入读出的错误
2016-04-23 15:07 871spymemcached 是内存数 ... -
mysql分布式缓存与memcached
2015-09-06 23:15 2119请尊重知识,请尊 ... -
nginx+tomcat+memcached (msm)实现 session同步复制
2015-05-08 23:13 2563tomcat + memcached + nginx 实现s ... -
nginx + ssl(https)
2015-03-24 15:26 1284#user nobody; worker_pro ... -
nginx 开机自启动脚本
2015-03-19 10:44 1132PATH=/usr/local/sbin:/usr/local ... -
nginx + tomcat 负载均衡实现客户端缓存
2015-01-27 10:17 1277整体机制:多个业务tomcat 多个图片tomcat ... -
nginx 试验配置(整体配置文件)
2015-01-19 15:14 714#user nobody; worker_pr ... -
winSCP 服务器 在线联网
2015-01-09 18:05 6601 新建 bb.bat 文件 里面是你的服务器 列表 ... -
nginx 高并发配置
2014-12-20 00:00 681http://www.iteblog.com/archives ... -
nginx 最全资料
2014-12-19 23:32 313http://bbs.linuxtone.org/thread ... -
nginx expires 配置调优
2014-12-16 23:21 469nginx expires 表示在客户端缓存时间 越长越好 缺 ... -
yslow 火狐浏览器插件 查看缓存
2014-11-30 22:27 819yslow 火狐浏览器插件 查看缓存 也可以使用linux ... -
电子商务网站基础架构 nginx + memcached + tomcat + squid 集群
2014-11-19 19:48 1083本文中 包含 nginx memcached tomcat 集 ... -
nginx+多tomcat 集成 二(nginx tomcat jdk 软件安装)
2014-11-13 10:52 973[size=medium] 1 安装 jdk 首先卸载默 ... -
nginx+多tomcat 集成 一(nginx tomcat jdk 软件安装)
2014-11-13 10:51 725[size=medium] nginx 1 下载解压n ...
相关推荐
nginx+tomcat8+memcached session共享所需jar包 直接放到tomcat/lib下即可
基于tomcat7版本的memcached会话保持,内置tomcat需要的jar包。
Nginx+Tomcat+Memcached集群Session共享实例,Nginx 1.81 + tomcat1 + tomcat2 + Memcached 完整可运行 访问根目录下 test.jsp 可看效果
Nginx+Tomcat+Memcached共享session集群配置
Nginx+Tomcat+Memcached实现tomcat集群和session共享 nginx配置
Nginx+Tomcat7+Memcached集群Session共享 完整例子 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对...
Nginx+Tomcat+Memcached实现tomcat集群和session共享 tomcat部分
tomcat中Nginx+memcached实现session共享 所需要的jar包
Windows7 + Nginx + Memcached + Tomcat 集群 session 共享
nginx+apache+mysql+php+memcached+squid搭建门户网站
nginx+tomcat7+memcached所需jar.zipnginx+tomcat7+memcached所需jar.zipnginx+tomcat7+memcached所需jar.zipnginx+tomcat7+memcached所需jar.zip
Nginx+tomcat+memcached集群session共享(win7下)所用到一些zip文件和必须的jar包
《APMServ 5.2.6》:一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP平台的绿色软件 APMServ 5.2.6 绿色服务器 PHP服务器 ASP服务器 APMServ 5.2.6 是一款拥有图形界面的快速搭建Apache 2.2.9、PHP 5.2.6...
nginx+memcached+tomcat搭建集群环境。
nginx+memcached+tomcat 负载均衡+session共享实现所有代码 教程请看:https://blog.csdn.net/dayuang2009/article/details/80312249
nginx+tomcat+memcached 构建session共享
nginx+tomcat8.0+memcached1.5 session共享所需jar包,亲测可用,采用javolution解析
为适应企业对高端开发工程师的需求,整合了Linux系统的常见使用,包括文件操作、权限操作、常用shell命令,以及mysql、nginx、php环境的搭建,让童鞋们顺利掌握Linux下的开发,适应大公司的工作场景。另外的重头戏...
使用Nginx + Memcached + Tomcat实现负载均衡和session共享案例
Nginx+Tomcat+Memcached-Session-Manager整合做集群实现Session共享,实战操作,亲测可用。本文档仅供交流学习使用,欢迎大家批评指正。