web缓存

来源:互联网 发布:网络找不到打印机 编辑:程序博客网 时间:2024/05/16 08:03
  相信大家对于浏览器缓存(参看“缓存”类别->"浏览器缓存"相关文章)有了一定的认识了,但是浏览器缓存毕竟不受web服务器控制,我们只能通过web服务器给出友好提示,至于浏览器是否完全按照指示执行,那就看用户对于浏览器的设置了,如果用户禁用了浏览器缓存,那么我们对于浏览器所做的设置都会白费,可见相对于浏览器,还是web服务器比较靠谱,毕竟web服务器的设置是由我们来掌控,既然浏览器有缓存,那么web服务器是否也有缓存呢?答案是肯定的,下面就以Apache为例,看下web服务器的缓存吧。

    测试环境说明

    本文使用的Apache版本为 2.2.8,Apache2.2版本的官方文档中关于缓存模块有mod_cache,mod_disk_cache和mod_mem_cache,而在Apache2.4版本的官方文档中却有所变动,模块名称变为mod_cache,mod_cache_disk和mod_cache_socache,虽然清除了mod_mem_cache,添加了mod_cache_socache,但是对于mod_disk_cache却没有多大影响,因此我们可以使用磁盘缓存作为web服务器缓存,这样即使更换了高版本的Apache,对于缓存模块的配置来说也无需做太多调整。

    配置Apache缓存

[plain] view plain copy
  1. LoadModule cache_module modules/mod_cache.so  
  2. LoadModule disk_cache_module modules/mod_disk_cache.so  
  3. CacheRoot E:/tmp  
  4. CacheEnable disk /  
  5. CacheDirLevels 5  
  6. CacheDirLength 3  

    LoadModule开启相关模块,CacheRoot缓存文件存放目录,CacheEnable启用disk类型缓存(也就是磁盘缓存,2.2版本中还有mem内存缓存),CacheDirLevels缓存文件目录深度,5代表了一共嵌套5个文件夹,CacheDirLength缓存文件夹名称长度,3代表每个文件夹名称的长度是3,此处仅对Apache缓存做了简单的配置,想要了解更详细的配置信息可以点击此处。

    测试静态文件缓存

    配置完成后我们来测试下配置的Apache缓存是否生效,我们输入一个静态页面的url,然后到缓存文件存放目录(CacheRoot中设置的值)中寻找,果然生成了很多文件夹,我们打开其中一个,在最底层文件夹中我们终于找到了缓存文件,其中以.data结尾的文件存储着响应内容,以.header结尾的文件存储着头信息,有些童鞋可能就会有疑问了,为什么要分开存储?因为分开存储是为缓存过期检查提供了方便,只需要检查头信息的文件即可。为什么要进行过期检查?难道你希望Apache永远使用这份缓存内容去响应用户的请求吗?所以我们需要对文件进行过期检查。


    目录分级的好处

    相信不少童鞋在刚才打开层级目录的时候郁闷了,怎么这么多文件夹,童鞋别忘了,这是你自己的设置的哦(CacheDirLevels和CacheDirLength)。你可能会问了,能不能设置的少一点,当然可以,因为决定权在你手里,但是这里小编有必要提醒你一下,如果设置的目录层级很浅,导致大量的文件堆积在一个文件夹中,会增加查找开销。为了更加形象的描述,小编举个例子,相信大家都使用过浏览器的缓存功能,一般情况下不会清除,如果你很久没清理过浏览器的缓存的话,那么你可以尝试着打开浏览器的缓存文件夹,以小编的google浏览器缓存文件夹为例,缓存文件3575个,文件大小364MB,打开文件夹耗时5s。仅仅3000多个文件,光打开文件夹的时间就已经耗费了5s,如果在加上查找,那耗时就更不可估计。我们使用缓存的目的就是让web服务器更快的响应用户的请求,如果耗时如此之久,还不如直接响应请求,不使用缓存。因此,合理的目录结构的设置十分必要,至于如何分级,可以视情况而定。

    小结

    1.Apache2.4中cache相关模块跟Apache2.2中有所不同,Apache2.4更改了disk模块的名称,并去掉了mem模块,添加了socache模块,并增加一些Apache2.2中没有的配置选项,如果使用Apache2.4可以根据官方文档自行配置。

    2.目录分级是一种设计思路,当程序设计的场景中可能会出现一个文件夹中生成大量文件的时候(例如各种缓存),我们就应该考虑对这样的文件存储方式作出调整,使用目录分级,尽可能让这些文件分摊到不同的目录中去,这样会减少同一目录大量文件的查找开销,节省服务器资源。

原创粉丝点击