web服务器缓存(一)
2015-10-03 16:17
501 查看
相信大家对于浏览器缓存(参看“缓存”类别->"浏览器缓存"相关文章)有了一定的认识了,但是浏览器缓存毕竟不受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缓存
LoadModule开启相关模块,CacheRoot缓存文件存放目录,CacheEnable启用disk类型缓存(也就是磁盘缓存,2.2版本中还有mem内存缓存),CacheDirLevels缓存文件目录深度,5代表了一共嵌套5个文件夹,CacheDirLength缓存文件夹名称长度,3代表每个文件夹名称的长度是3,此处仅对Apache缓存做了简单的配置,想要了解更详细的配置信息可以点击此处。
测试静态文件缓存
配置完成后我们来测试下配置的Apache缓存是否生效,我们输入一个静态页面的url,然后到缓存文件存放目录(CacheRoot中设置的值)中寻找,果然生成了很多文件夹,我们打开其中一个,在最底层文件夹中我们终于找到了缓存文件,其中以.data结尾的文件存储着响应内容,以.header结尾的文件存储着头信息,有些童鞋可能就会有疑问了,为什么要分开存储?因为分开存储是为缓存过期检查提供了方便,只需要检查头信息的文件即可。为什么要进行过期检查?难道你希望Apache永远使用这份缓存内容去响应用户的请求吗?所以我们需要对文件进行过期检查。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/97212892e14581bf6d1ef49395c6bb65)
目录分级的好处
相信不少童鞋在刚才打开层级目录的时候郁闷了,怎么这么多文件夹,童鞋别忘了,这是你自己的设置的哦(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.目录分级是一种设计思路,当程序设计的场景中可能会出现一个文件夹中生成大量文件的时候(例如各种缓存),我们就应该考虑对这样的文件存储方式作出调整,使用目录分级,尽可能让这些文件分摊到不同的目录中去,这样会减少同一目录大量文件的查找开销,节省服务器资源。
测试环境说明
本文使用的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缓存
LoadModule cache_module modules/mod_cache.so LoadModule disk_cache_module modules/mod_disk_cache.so CacheRoot E:/tmp CacheEnable disk / CacheDirLevels 5 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.目录分级是一种设计思路,当程序设计的场景中可能会出现一个文件夹中生成大量文件的时候(例如各种缓存),我们就应该考虑对这样的文件存储方式作出调整,使用目录分级,尽可能让这些文件分摊到不同的目录中去,这样会减少同一目录大量文件的查找开销,节省服务器资源。
相关文章推荐
- Apache Isis 1.4.0 发布,领域驱动开发框架
- Linux快速构建apache web服务器
- Awstats处理多apache日志
- 安装perl模块小窍门
- 分析Cache 在 Ruby China 里面的应用情况
- PHP+Apache在Windows 9x下的安装和配置
- Apache服务器配置全攻略
- Apache Web让JSP“动”起来
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- apache 环境下 php 的配置注意事项
- Enterprise Library for .NET Framework 2.0缓存使用实例
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#中缓存的基本用法总结
- asp 页面允许CACHE的方法
- web 应用中常用的各种 cache详解
- wap开发中如何有效的利用缓存减少消息的传送量
- 在RedHat下安装apache jserv 1.1.2方法
- PHP基于文件存储实现缓存的方法