00:00
好,同学们呢,我们继续这个看它的这个相关的配置,那我们刚刚给大家聊了这个润指相关的,就是断点去传相关的,那么如果在我们的呃,反应代理服务器里边,想要对这种断点去传去做呃这种缓存的话,那么我就一定得把这个客户端请求这个头给它给传过去,那么也就是需要在pro pass的时候额外增加一个header,那如果你不加这个header的话,也就是这个润质的范围,你不传给上游服务器,那么上游服务器它是它是其实它是不知道你是想要整个文件还是想要某一块文件的啊,如果他你想要某个某一块文件。那么你就必须得把这个hazer给他传过去,如果不传这个,那肯定是不行的啊。那他就会给我们返回这个整块的文件了,那这个前提条件也是基于我们的上游服务器,它支持这个呃润质的操作啊才可以,那么其中的这么一个配置选项叫perfect catch max range off,这指的就是呃在做缓冲的时候,那么如果要是针对于range去做缓冲的话,那么配置一下超过多大之后呢,我们就不做呃这个文件块的缓冲,而是直接给它返回这个整个文件了。
01:11
啊,那这个比较适用于,嗯。一些这个我不想要这个,把完整的这个大的文件全部缓存到我的这个这个这个反应代理服务器里,比如说我这一个文件有呃,两个G的大小,这是一个影片,那么嗯,在看影片的时候,我们通常是从头开始看的,对吧,那也可能就这可能啊,前面五分钟基本上就看完之后呢,觉得很烦,然后就把它给关掉了。是吧,那我在这就可以配置它这个润质的范围啊,如果要是呃前面这一些这个资源的话,就这个一个影片的前面的五分钟啊,我就可以把它给缓冲到呃,我的我的这个呃反应代理服务器里,后边呢就不做缓冲了,这样能够有效的减少呃整个的这个资源缓冲的大小,也就是在我的反应的服务器里,没必要把它完整的文件全部都存下来,既然是缓存嘛,对吧,那一定是缓存一些热点的数据。
02:05
那后边的可能看的比较少对吧,那访问的访问量比较少的话,那就让他直接去这个我的上游服务器拉拉去就可,这个就可以了啊。那么这样的话,在我的反应代理服务器里边存储的这个文件呢,就稍微少一些啊,这存储空间呢,省一点,这这是这个呃,Max range off,然后我们再看一些其他的配置啊,这个pro的缓存呢用的比较多,然后在这里边的这个配置选项呢也比较多,我们好好给大家来捋一遍,有哪些我们可以配的,那以便于我们在呃真正使用的时候,呃,我能想起来哦,这还能有这么一个配置,我可以去调整一下它。先有一个基本的印象,等真正使用的时候呢,我们可以可以再去深入的去研究,我们先看这第一个啊,这是啊,Pro catchche use,呃,啊,这个配置选项呢。可以让我们去设置一下,呃,在我们的房间里,服务器里边缓冲这些,呃文件如果一定要过期了,那在什么时候可以使用这个过期的缓存,那就是说在缓存过期的,过期的时候,正经的情况下,我需要去上游服务器拉取这个数据,对吧?那如果要是上游服务器的我返回了一些错误,比如说报错了或者是连接。
03:18
呃,连接的时候超时了,以及比如说这个,嗯,这个这个头响应,这个响应的头呢,啊,这个这个失败了啊,以及一些其他这些信息。那么我们都可以去指定一下,然后包括404啊等等这些,一旦这个上游服务器出问题了,我就用这个本机已经过期的缓存啊,这个缓存的清理时间是在这儿配的,也就是在下边。嗯。这呃,Inactive啊,就是多长时间没有被访问过的数据啊,它会被删除啊,这并不是缓存过期时间,这是删除的这个时间,只要在这个时间范围内它还在,那么就可以利用它的这个过期的缓存啊,这是第一个配置,然后下边这个呢,呃。
04:06
我们再看这个呃,Pro catch background update啊,这是可以让我们在更新这个缓存的时候,也就是缓存过期了啊,可以这个两步同时操作,就第一呢,我是先响应你数据,但是响应这个数据呢,是已经过期的这个缓存啊,另外呢,我再开一个这个呃子请求去上游服务器去拉取数据,这样响应的速度会比较快一些,它默认情况下它是关的关掉的,如果要是关掉的话,你的缓存一定要过期了,它就一定先从上游服务器去拉取出据回来,然后再给我们的这个客户端,那那如果要是这个呃,上游服务器出问题了,那就可以配配配合这个上边这个选项,然后一起来使用,那如果在更新过程当中,比如404了,上游服务器也没有这东西,那就可以用我现在本机磁盘里边还有的这份数据啊。然后这个是personal catch和catch by pass。
05:00
它指定了我们哪些资源。不去缓存啊,比如说有一些动态的请求啊,那比如说有一些cookie的传递,在在请求的动态请求的时候,它需要传递这个呃,这个这个cookie里边的这个JID啊,或者是呃一些其他这种维持绘画的这种,像这种JWT这种资源啊,他需要携带过去,那我们可以在呃这个。我们传传这个这个process pass过程当中去识别一下,如果是动态请求的话呢,那我就不去这个呃,缓存这个这个这个这个呃,它的这些请求直接去上游服务器里边去取,那么这种呢,比较适合混搭式的这种配置,我就是在一个location里边,它既有动态也有静态的啊,当然也可以把它给分开去配置,就静态资源啊,去从缓存里去取,专门写一个匹配的location。然后这个动态的呢,呃,写另外一个location去做pass,两边两边去配和这个混合去配都可以啊,这是不缓存的这个呃数据啊。
06:03
那么在判断的时候呢,如果有这些变量,或者这个呃,这个变量里边的这个值啊,它不是等于零,然后这个它就不使用这个缓存了,而是直接pass了。啊,然后再看这个啊,这是protect cash convert head啊,这相当于把一些get请求和head请求,呃,把它变成一样,这个head请求指的是啥?Head请求我们看这个postman,这都是咱们课里没讲的,我们用到哪给大家讲到哪,你看我现再发一个请求,这是get请求。盖的请求呢,会给我们返回Bo对吧?啊,虽然说我们现在这个带润你看。这不带润质的话,他把完整的body全都给我响响应出来了,那如果是head请求呢,在这儿我们看。Head,那他只请求这个头,它没有body,那就只有这个header给我返回来了,正常的header该有多少,它还有多少啊,但是这个body它没有没给我返回回来,那这个hi head的请求啊,在咱们的这个项目里边呢,也是比较常见的啊啊就有时候可能会用到,比如说我就想要去呃维持一下会话,时不时的呢,在服务器那边呢,我去给他响应一下,那我只需要发一个head过去。
07:14
然后他把这个head给我想反反馈回来,那么这会儿就表示我还在,他还在对吧?还有就是我想要去做一些健全的操作,异步的一些健全的操作,像某个接口发送一下请求,检查一下我是否有权限去访问,而不想不想看里边的内容,就只只要是这种,呃,不需要内容啊,只想要看看行不行,这种操作呢,我都可以去发head请求。啊,包括比如我想看看当前这个页面有没有被修改,对吧?啊,想看看这个请求之后的这个状态码,它是它是二百三零四还是404对吧,这些都可以发head请求,那么head请求他不要内容,那么这种情况下我们要不要缓存这个,呃,那这个具体里边的内容呢?那如果要是把正经的head请求给它给。啊,转发到我的上游服务器,那上游服务器是不给我发内容的,在在我们的反应代理服务器里边也得不到内容,那么下次再与用户请求的时候,如果变成了get,也就是相同的uri变成了get的话,我还得再发一次请求,那这个命令就是指的是把head请求要不要和get请求呢变成一样啊,不管是get和或者是head,我都去把这个完整的内容拉回来,缓存到我的这个,呃,这个泛用代理服务器里啊。
08:28
然后这个是这个这个convert head,然后再看下边有一个pro catch lock,这pro lock指的就是在更新呃本机的这个缓存的时候要不要加锁啊,如果要是不加锁的话,那么就可以多线程去竞争去覆盖了啊,因为在瞬时请求打过来之后,呃。可能不止是一个这个请求需要去更新这个缓存,就可能多个请求同时去更新缓存,同时向上游服务器去呃发送请求了,那这会儿可以给它加个锁,默认情况下呢,也是没加锁的,因为加锁之后呃就有可能会有一定的这个争争抢锁的这个时间,就造成这个响应呃变慢啊,其实默认情况下呢,没加锁也算是比较合理,因为N几个斯啊存储的一些静态资源,一般来说呢,都是对一致性要求并不是特别高的,你才会缓存,那么。
09:21
呃。这会儿如果要是上到上游服务器,它没拉着数据的话,我们就可以直直用这个之前这个配置对吧,如果要是呃连接失败了,我就直接使用这个过期缓存就好了,对吧?啊,然后这这个下边的是呃锁的时间啊,你五秒钟还没把这个数据更新过来,那么接下来就释放这个锁,那别人也可以这个再去更新锁了啊。就这那个那个更新这个磁盘上的文件了啊,然后下边就是断点续传相关的配置啊。然后这儿呢,这个proscut method字。这个指的是,呃,我我的这个反应代理服务器里边会缓存哪些这个呃,请求类型它默认的是head和get啊,其实这个post也可以给它缓存下来,如果你需要的话,在这后边可以加上post,默认它是不支持post啊。
10:13
呃,然后再看这。这个是pro catch mean use,这个指的是,呃,在用户请求这个资源的时候,请求了多少次之后,然后我才去给它给缓存下来,那默认情况是一,只要有人请求了,那么我就把这个请求的结果缓存到本机上,那么在这呢,可以去判断一下这个是否是热点资源,比如说你的系统是高并发的系统。那么在这你就可以给它配置的稍微的高那么一点点啊,当用户请求了100次或者1000次之后,我才去缓存,如果要不是的话,我没必要缓存那么多东西啊,这也能有效的减少在这个反应代理服服务器里边缓存的文件的数量啊。然后这个pro pass,这是我们之前配的,在配置文件里配的这个,就这这一部分内容。
11:04
大多数参数的我们都讲过了,我们在那么一个一个看看里边的这些配置啊,这是project pass,这个pass呢,就指定我这个存储的在磁盘上的这个目录啊,你可以存到这个本机磁盘上,这儿有一点可以给大家。聊的这个,呃,这个调优的点就是如果你的磁盘上呃容易把文件给写满,呃比如说你现在已知你的磁盘呢,嗯,现在这个这个还有呃200G的这个容量啊,如果你想要做扩容的话啊,为了避免写满啊,在这后边可以跟这个max size对吧?啊但如果想要扩容,那磁盘又不够了怎么办?你可以加一块物理磁盘在上边儿,那如果这目录只能设置一个的话,那这事怎么办?那是不是就只能往一个磁盘上去写了,对吧,那么就可以利用后边这个东西,就LEVELS1杠二,这LEVELS1杠二之前咱们也讲过了,就是在磁盘上生成目录的时候呢,可以分成两级目录,然后第一集呢用一个字符,第二个呢用二二,这这第二集呢用两个字符,那么就可以在第一集里边的针对于一个具体的字符,我们看。
12:11
可以针对这具体的一个字符啊,它的这个目录不是磁盘不够用了吗,那我把这个。呃,九的这个目录。我可以通过软连接的形式给它软连接到我的另外一个物理磁盘上,而不是在当前的这一个这个磁盘上去持续的往这往这一个一个真实的目录去写了,相当于加一个软连接啊,就是就是Windows里的快捷方式,然后让它去往那个磁盘里去写,那这会儿就可以挂载多块磁盘,通过这个pass里边设置的这个level啊,这个level的这个。呃,目录的呃,具体指向的这个,呃,真实的物理磁盘啊,可以去让我们去扩容一下这个呃,这个这个这个这个。缓存可以使用的这个这个空间啊,这是第一,第二个呢,就是我们还可以另另外一个东西就是啊,TPFS,所以说现在已经不常用了啊,在最开始的时候,磁盘的性能比较低,甚至服务器的性能也都比较低,那我们那会儿呢,就可以尝试用TMPFS去把磁盘上这个目录直接映射到内存里。
13:16
啊,这个东西叫TPFS给大家打一下。这个这个类似于一个文件系统,但它并不是真实的文件系统啊,它可以呃,虚拟一个本机磁盘的路径,往里写数据的时候呢,其实往内存里去写了,那你想想内存里的速度跟磁盘的速度对比起来,那肯定要肯定是内存速度更快嘛,对吧?啊,它都不是几倍的差距,是百倍的差距啊。这个TBFS现在不常用,主要也是因为呃。操作系统的这个性能呢,其实也还可以,另外就是磁盘现在已经广泛的应用上这个SSD了。啊,而且这个SSD的价格和这个内存的价格比起来,比如你整一个200G的内存和整一个200G的SSD,那这个成本相比起来那也是百倍的,对吧,那差距实在是太大了,所以一般来说我就给它放到SSD里就好了,但你要知道有这么一个事儿啊,就是TPFS这么一个我们可以去呃,可以去用的这么一个工具啊,如果你你的这个服务器磁盘不够用,但是内存又又很富裕,我想腾出这个几十个G来啊,去去做这种这个呃,高速缓存,那你就可以用TPFS。
14:32
然后我们再看下边这个配置,就use t tmp pass啊,这是在呃老版本的NG的时候呢,我们创建一个这个文件,就是在在我写入磁盘的这个缓存文件的时候,它会先创建一个临时文件,创建完成之后,写完之后再给它给挪走,这相当于缓冲区,但这个缓冲区不是基于内存的,它是基于这个磁盘的缓冲,就相当于我想要在呃,我的这个呃proca这个pass里边去存具体的缓缓存文件,对吧?那我会先往这个地儿去创建这个文件,并且呢,往里边去写,有的时候文件比较大的时候,这耗时可能比较长,因为写文件啊,它也是从上游服务器里边一个一个字节去拉取过来,往这个文件里去写的,他没写完的时候呢,就往这个目录里去写,等他写完了之后呢,改个名给他挪过来。
15:25
那在这儿呢,我们就可以去关闭这个临时目录啊,这是一个额外的,呃,这个额外的配置啊。然后这个是呃,Active这之前就说过了啊,你的这个呃,磁盘上的文件我留多长时间它的呃重要的指标就是最后一次访问啊,最后访问会更新的这个时间,这个并不代表过期,再说一遍啊,超过这个时间它会自动的把它给删除掉啊。然后缓存清理呢,这是让我们手动的去让他直接给它给删除掉啊,用最新的这个资源,呃,然后再看这个pro catch key啊,这是作为唯一的,呃,这么一个这个值去做这个索引,通过这个值这个键值去找这个索引文件,所以在配置它的时候呢,一定要有唯一性啊,设计的时候也没必要去做的特别复杂,只要有唯一性,唯一性就可以了。
16:18
然后至于哪些可以缓存,哪些不不缓存啊,我们自己去考虑啊。然后再看下边这个配置,叫pro catch revealit啊,这指的就是在我们缓存过期的时候,你是直接去拉文件,还是给他发一个这个if modify,因为默认情况下我们是pro pass啊,像上游服务器发请求的时候,它的header带的是很少的。啊,那如果要是不带这个,呃,Last modify,或者是if not。这之前咱们讲这个客户端缓存的时候,也给大家讲过了,对吧,这叫协商缓存对吧,它会发一个请求,看看上游服务器的文件有没有变化,那如果没变化的话,那OK,那你你给我你你给我返回一个hazer就行了,Body就不用写东西了,对吧,返回一个304是吧,记得吧,啊然后这个。
17:10
我在这个process pass过程当中,在更新文件的时候也可以这样,虽然说它过期了,对吧,然后我在向上游服务器请求资源的时候,我先发个这个东西,如果要是他他给我返回304,那OK,那我就不读了,那因为它没有发生变化嘛。那如果他给我返回这200,并且把包给我返回来了,那我直接去更新一下,这样能够有效的去,呃,减少这个我们内内网资源的这个消耗啊,如果要是文件比较大的话,你不要瞧不起这个内网资源消耗啊,如果要是资源比较大,比如几个G的文件,它能够瞬间把我这个网卡给跑满。啊,如果要是如果要是在这儿一个文件里边直接抛慢了,多个文件同时去去同时去更新,那这个呃举动的就比较壮观了啊,所以我们应该避免这个批量文件失效,如果你存储的文件单个文件就比较大,那就最好去检查,先检查一下有没有变化,然后再去拉取啊,这样比较节省内网带宽资源,如果你内网带宽资源跑满了,你别的请求你也发不过去了,就正常的process pass它也发不过去了啊。
18:15
呃,然后这个pro catch VI的,这是咱们在配置文件里边也配了,就是这个东西。这指的是呃,我们这个缓存文件的过期时间啊,在这儿的默认配置,我们之前配的就只只只配了一个时间,在多长时间内呢?这个缓存过期啊,其实还可以额外的去增加这个状态码,针对于不同的状态码去配置它的这个过期时间啊,你看啊,比如说这二百三零二,我可以给它配置十秒钟啊,然后301这种跳转呢啊,我们就可以给它配置成一个小时啊,额外其他any就指的是任意其他的操作,我们就可以给他配置的这个呃时间呃这个呃再再去个性化一些就可以针对于个性化的。
19:03
啊,这种状态码去配置它这个缓存的时间啊,就是过或者说缓存过期的时间,这个缓存一旦要过期了,就是它的这个有效期,一旦要过期了,那么他也会去这个上游服务器去拉取数据。那这个呢,就是它基本上的完整配置,比较有用的全都列在这儿了,这是它的官方的完整文档,我给大家讲这套课程的时候呢,呃,所参考的资料,最重要的一个就是官方文档,但官方文档里边很多的解释呢,比较凝,你只看它的英文解释呢,其实是看不太。看不太明白的,因为它表达的呢,有时候很多时候都是非常简洁的,并且没有配合这个实际的场景,那在这个process pass这个,呃,缓存这个环节呢,我们给大家讲了很多东西啊,这这些东西呢,你可能在当前的这个学习阶段呢,没法完全的记住,但是如果你要在后期使用的时候,有一个反向搜索的这么一个条件,其实也就够了,哦,知道这还能配这么个东西是吧,比如说能配置一个锁,然后在key里边呢,我还可以再去更加个性化的去定义,以及在清理缓存的时候应该怎么去做。
20:08
啊,这会儿呢,有先有一个简单的认识,然后在真正使用的时候再去深入去研究啊,这是pro。Pro catch正向代理的缓存呢,和反向代理的缓存配置方法是一毛一样的,没有任何区别,针对于大文件缓存,比如说我们做呃,这个正向代理了,在这儿配置呢也可以啊,比如用户上网的时候,他老访问这么一个这个资源,或者好,或者好多人老访问这么一个资源,那我就让一个人访问完之后呢,我给他存到我本机。啊,不管是视频也好啊,或者是一些其他的这种应用软件也好,没必要再通过反应代理服务器,我再去外网再去,呃,这个这个拉取一遍啊,节省一下带宽啊,这是专用代理商应用缓存返佣代理应用缓存呢,这就是在我们的网站上,这比较常见啊。呃,那咱们这这节课呢,呃,就先讲到这,这就是在多级缓存里的这个,嗯,代理级别的缓存啊catch。
我来说两句