refresh_pattern概述整理

   squid权威指南中介绍说refresh_pattern指令间接的控制磁盘缓存。它帮助squid决定,是否某个给定请求是cache命中,或作为cache丢失对待。宽松的设置增加了你的cache命中率,但也增加了用户接收过时响应的机会。另一方面,保守的设置,降低了cache命中率和过时响应。


    refresh_pattern规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires头部,或者Cache-Control:max-age指令来指定过时期限。


    你可以在配置文件里放置任意数量的refresh_pattern行。squid按顺序查找它们以匹配正则表达式。当squid找到一个匹配时,它使用相应的值来决定,某个缓存响应是存活还是过期。refresh_pattern语法如下:

refresh_pattern [-i] regexp min percent max [options]


   例如:

refresh_pattern -i \.jpg$ 30 50% 4320 reload-into-ims

refresh_pattern -i \.png$ 30 50% 4320 reload-into-ims

refresh_pattern -i \.htm$ 0 20% 1440

refresh_pattern -i \.html$ 0 20% 1440

refresh_pattern -i . 5 25% 2880

   regexp参数是大小写敏感的正则表达式。你可以使用-i选项来使它们大小写不敏感。squid按顺序来检查refresh_pattern行;当正则表达式之一匹配URI时,它停止搜索。可能这里有个效率问题,毕竟匹配正则表达式有点耗时吧,squid提供的正则表达式功能还比较弱!还是建议吧pcre集成进来!


   min参数是分钟数量。它是过时响应的最低时间限制。如果某个响应驻留在cache里的时间没有超过这个最低限制,那么它不会过期。类似的,

   percent在最低和最高时间限制之间的响应,会面对squid的最后修改系数 (LM-factor)算法。对这样的响应,squid计算响应的年龄和最后修改系数,然后将它作为百分比值进行比较。响应年龄简单的就是从原始服务器产生,或最后一次验证响应后,经历的时间数量。源年龄在Last-Modified和Date头部之间是不同的。LM-factor是响应年龄与源年龄的比率。

   max参数是存活响应的最高时间限制。如果某个响应驻留在cache里的时间高于这个最高限制,那么它必须被刷新。

   refresh_pattern指令也有少数选项导致squid违背HTTP协议规范。它们如下:

        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


   图1论证了LM-factor算法。squid缓存了某个目标3个小时(基于Date和Last-Modified头部)。LM-factor的值是50%,响应在接下来的1.5个小时里是存活的,我们假设Last-Modified == 0:00、第一次返回数据时间3:00 也就是 Date==3:00,而我们设置的LM-factor == 50% ,通过算法得出,过期的时间就是4:30,也就是说从数据第一次计入proxy server 就已经确定了Expire的时间,那么在4:30以前,所有的请求都会直接HIT(不考虑cache-control: no-cache .. 这些因素,这里只讨论这个算法). 而到了4:30的时候proxy server 就会发送if-modifed-since 和源对比,如果修改则返回200 ,否则返回304。


图1 基于LM-factor计算过期时间



    这里就有一个问题了: 在4:30 和 之后的时间,必然会每次都发送if-modified-since 到源,那缓存就没意义了,所以不管在返回200 还是 304 ,proxy server 都会将Date 这个值同时更新。我们先假设返回304,那么现在就变成 Date == 4:30 那么Expire == 6:45,则在6:45前都是HIT!也就符合了多长时间没更新,就能相对缓存多长的时间!而如果返回200,则Last-Modified,和Date都会更新,Expire = (Date - Last-Modified) * (1 + LM-factor) 。证明这一点的方法就是wget -S url 你会发现Date 有的时候会变,而有时候不变,如果变了就是更新了,没变则是直接返回的。(这是在经过代理现象,直接和源通讯必然每次都更新Date).


  理解squid检查不同值的顺序非常重要。如下是squid的refresh_pattern算法的简单描述:

  • 假如响应年龄超过refresh_pattern的max值,该响应过期;
  • 假如LM-factor少于refresh_pattern百分比值,该响应存活;
  • 假如响应年龄少于refresh_pattern的min值,该响应存活;
  • 其他情况下,响应过期或者clientRefreshCheck。

   Refresh_pattern  percent 的计算

resource age =对象进入cache的时间-对象的last_modified

response age =当前时间-对象进入cache的时间

LM-factor=(response age)/(resource age)

   举个例子,这里只考虑percent, 不考虑min 和max,例如:refresh_pattern 20%,假设源服务器上www.aaa.com/index.htm —–lastmodified 是 2007-04-10 02:00:00, squid上 proxy.aaa.com/index.htm index.htm进入cache的时间 2007-04-10 03:00:00

1)如果当前时间 2007-04-10 03:00:00

resource age =3点-2点=60分钟

response age =0分钟

index.htm还可以在cache停留的时间(resource age)*20%=12分钟

也就是说,index.htm进入cache后,可以停留12分钟,才被重新确认。

2)如果当前时间 2007-04-10 03:05:00

resource age =3点-2点=60分钟

response age =5分钟

index.htm还可以在cache停留的时间(resource age)*20%=12分钟-5=7

LM-factor=5/60=8.3%<20%

   一直到2007-04-10 03:12:00 LM-factor=12/60=20% 之后,cache中的页面index.htm终于stale。
如果这时没有 index.htm 的请求,index.htm 会一直在缓存中,如果有 index.htm 请求,squid 收到该请求后,由于已经过期, squid 会向源服务器发一个 index.htm 是否有改变的请求,源服务器收到后,如果 index.htm 没有更新,squid 就不用更新缓存,直接把 缓存的内容放回给客户端,同时,重置对象进入 cache 的时间为与源服务器确认的时间,比如 2007-04-10 03:13:00,如果正好在这个后重新确认了页面。重置后,resource age 变长,相应在 cache 中存活的时间也变长。

   如果有改变则把最新的 index.htm 返回给 squid,squid 收到会更新缓存,然后把新的 index.htm 返回给客户端,同时根据新页面 中的Last_Modified 和取页面的时间,重新计算 resource age,进一步计算出存活时间。

  实际上,一个页面进入 cache 后,他的存活时间就确定了,即 (resource age) * 百分比,一直到被重新确认。

options说明:

override-expire

该选项导致squid在检查Expires头部之前,先检查min值。这样,一个非零的min时间让squid返回一个未确认的cache命中,即使该响应准备过期。


override-lastmod

改选项导致squid在检查LM-factor百分比之前先检查min值。


  ignore-no-cache

该选项导致squid忽略请求里的任何“Pragma: no-cache”和“Cache-control: no-cache”


 
  ignore-private
该选项导致squid忽略请求里的cache-control:private指令。


  ignore-auth
该选项导致 Squid 强制将一个请求认为是源站发送的带有“Cache-control: public”。

ignore-reload

该选项导致squid忽略请求里的任何no-cache或者“reload”指令。user agent 在请求里加入no-cache或者“reload”的目的是希望proxy不要返回cache,而是希望返回original的response,这个选项就是不考虑no-cache或者“reload”的限制。所以。如果希望内容一进入 cache 就不删除,直到被主动 purge 掉为止,可以加上 ignore-reload 选项,这个我们常用在mp3,wma,wmv,gif之类。举例:

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

reload-into-ims

该选项让squid在确认请求里,以no-cache或者“reload”指令传送一个请求。换句话说,squid在转发请求之前,对该请求增加一个If-Modified-Since头部。注意这点仅仅在目标有Last-Modified时间戳时才能工作。外面进来的请求保留no-cache指令,以便它到达原始服务器。一般情况可以使用 reload-into-ims。它其实是强行控制对象的超时时间,这违反了http协议的精神,但是在带宽较窄的场合,可以提高明显系统相应时间。举例:

refresh_pattern -i \.css$ 1440 50% 129600 reload-into-ims
refresh_pattern -i \.xml$ 1440 50% 129600 reload-into-ims
refresh_pattern -i \.html$ 1440 90% 129600 reload-into-ims-
refresh_pattern -i \.shtml$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.hml$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.jpg$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.png$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.gif$ 1440 90% 129600 ignore-reload
refresh_pattern -i \.bmp$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.js$ 1440 90% 129600 reload-into-ims


  stale-while-revalidate=NN

该选项让squid在过期时间没超过NN分钟之内的cache response异步的去做validation。


  ignore-stale-while-revalidate
  max-stale=NN
  negative-ttl=NN





                
refresh_token是一种用于刷新访问令牌(access_token)的凭证。当access_token过期时,可以使用refresh_token来获取新的access_token,以保持用户的登录状态。根据引用\[1\]和引用\[2\]的内容,refresh_token有三个时间点需要考虑:1) 当token和refresh_token都没有失效时,可以正常请求;2) 当token失效但refresh_token没有失效时,需要调用api_refresh_token的请求来获取新的token;3) 当token和refresh_token都失效时,需要提示token失效,并且前端需要调用api_refresh_token的请求来获取新的token。根据引用\[3\]的内容,前端在拿到新的access_token和refresh_token后,可以将存在cookies中的两个token进行更新,并使用新的access_token再次发起之前失败的请求,从而实现了用户的token的更新操作。 #### 引用[.reference_title] - *1* [前后端处理实时刷新refresh_token的使用](https://blog.csdn.net/qq_41522141/article/details/123699113)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Refresh Token介绍](https://blog.csdn.net/NSPOKS/article/details/101771817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [关于refresh token的总结](https://blog.csdn.net/MPFLY/article/details/123199084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值