`
wezly
  • 浏览: 480497 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Apache缓存系统

阅读更多

    Apache 从2.0开始就已经可以使用缓存模块了,不过在2.0的时候还是实验性的,到了2.2已经完全可以放心的使用。Apache的缓存实现主要依靠 mod_cache、mod_disk_cache、mod_file_cache 及mod_mem_cache。只需在配置编译的时候加上参数:–enable-cache、–enable-disk-cache、–enable- file-cache、 –enable-mem-cache 即可。 关于 Apache 的编译安装本文就不再说了,可以参考以前的文章。这里主要介绍一下如何配置使用 Apache 的缓存功能。 
    具体来说,Apache 的缓存方式有两种,一种是基于硬盘文件的缓存,由 mod_disk_cache 实现,另一种是使用内存缓存,由mod_mem_cache 实现,不过它们都是依赖 mod_cache 模块的,mod_cache 模块提供了一些缓存配置的指令供它们使用,而mod_file_cache 模块是搭配 mod_mem_cache 模块使用的,下面分别进行介绍。 

1、基于硬盘文件的缓存 
基于硬盘文件存储的缓存由 mod_disk_cache 模块实现,先看个简单的配置例子: 

CacheDefaultExpire 86400 

CacheEnable disk / 
CacheRoot /tmp/apacheCache 
CacheDirLevels 5 
CacheDirLength 5 
CacheMaxFileSize 1048576 
CacheMinFileSize 10 

   把上面的配置加到 Apache 的 httpd.conf 文件中,如果缓存相关的模块都已经编译进了 Apache 的核心,则无需加载模块,直接就能使用上面的指令。指令的详细说明如下: 
CacheDefaultExpire: 设定缓存过期的时间(秒),默认是1小时,只有当缓存的文档没有设置过期时间或最后修改时间时这个指令才会生效 
CacheEnable:启用缓存,第1个参数是缓存类弄,这里当然是 disk了,第2个参数是缓存路径,指的是 url 路径,这里是缓存所有的东西,直接写上“/”即可,如“/docs”则只缓存 /docs 下的所有文件 
CacheRoot:缓存文件所在的目录,运行 Apache 的用户(如daemon 或 nobody)要能对其进行读写,如果不清楚的话可以直接设置成 777,请手动建立该目录并设置好访问权限 
CacheDirLevels:缓存目录的深度,默认是3,这里设置为5 
CacheDirLength:缓存目录名的字符长度,默认是4,这里设置为5 
CacheMaxFileSize CacheMinFileSize :缓存文件的最大值和最小值(byte),当超过这个范围时将不再缓存,这里设置为 1M 和 10bytes 
基于硬盘文件存储的文件基本上就这些内容,设置好后重启 Apache 应该就能使用了。一切正常的话,可以在缓存目录下看到 Apache 自动建立的一些目录和缓存的数据文件。 

2、基于内存的缓存 
基于内存的缓存主要由 mod_mem_cache 模块实现,还是看个简单的配置吧,这样比较直观:-) 

CacheEnable mem / 
MCacheMaxObjectCount 20000 
MCacheMaxObjectSize 1048576 
MCacheMaxStreamingBuffer 65536 
MCacheMinObjectSize 10 
MCacheRemovalAlgorithm GDSF 
MCacheSize 131072 

简单说一下上面一些指令的意思: 
CacheEnable:启用缓存,使用基于内存的方式存储 
MCacheMaxObjectCount:在内存中最多能存储缓存对象的个数,默认是1009,这里设置为20000 
MCacheMaxObjectSize:单个缓存对象最大为 1M,默认是10000bytes 
MCacheMaxStreamingBuffer:在缓冲区最多能够放置多少的将要被缓存对象的尺寸,这里设置为 65536,该值通常小于100000或 MCacheMaxObjectSize 设置的值 
MCacheMinObjectSize:单个缓存对象最小为10bytes,默认为1bytes 
MCacheRemovalAlgorithm:清除缓存所使用的算法,默认是 GDSF,还有一个是LRU,可以查一下 Apache 的官方文档,上面有些介绍 
MCacheSize:缓存数据最多能使用的内存,单位是 kb,默认是100kb,这里设置为128M 
保存重启 Apache 基于内存的缓存系统应该就能生效了,根据需要可以使基于内存的存储或硬盘文件的存储方式一起使用,只要指明不同的URL路径即可。 

3、注意事项 
使用缓存需要注意如下事项: 
要使用缓存,必须使用指令 CacheEnable 启用它,目前可用的缓存类型为 disk 或 mem,禁止缓存可以使用 CacheDisable,如 CacheDisable /private 
待缓存的 URL 返回的状态值必须为: 200、203、300、301 或 410 
URL 的请求方式必须是 GET 方式 
发送请求时,头部中包含 “Authorization: ”的字符串时,返回的内容将不会被缓存 
URL 包含查询字符串,如问号?后的那些东西,除非返回的内容包含“Expires:”,否则不会被缓存 
如果返回的状态值是 200,则返回的头部信息必须包含以下的一种才会被缓存:Etag、Last-Modified、Expires,除非设置了指令 CacheIgnoreNoLastMod On 
如果返回内容的头部信息“Cache-Control:”中包含“private”,除非设置了指令 CacheStorePrivate On,否则不会被缓存 
如果返回内容的头部信息“Cache-Control:”中包含“no-sotre”,除非设置了指令 CacheStoreNoStore On,否则不会被缓存 
如果返回内容的头部信息“Vary:”中包含了“*”,不会被缓存 

4、其它一些指令的介绍 
如果你的网站有几个文件的访问非常频繁而又不经常变动,则可以在 Apache 启动的时候就把它们的内容缓存到内存中(当然要启用内存缓存系统),使用的是 mod_file_cache 模块,具体如下: 
有多个文件可以用空格格开 
MMapFile /var/www/html/index.html /var/www/html/articles/index.html 
上面是缓存文件的内容到内存中,除此之外,还可以只缓存文件的打开句柄到内存中,当有请求进来的时候,Apache 直接从内存中获取文件的句柄,返回内容,和 MMapFile 指令很像,具体如下: 
CacheFile /var/www/html/index.html /var/www/html/articles/index.html 
上面两个指令所缓存的文件如果有修改的话,必须重启 Apache 或使用 graceful 之类的方式强制使 Apache 更新缓存数据,否则当用户访问的时候获取的不是最新的数据。 
有时候需要根据某些特殊的头部信息来决定是否进行缓存,则可以使用如下指令: 
当头部信息中包含 Set-Cookie 时则跳过不进行缓存操作 
CacheIgnoreHeaders Set-Cookie 
有时候需要缓存的时候跳过 URL 中的查询字符串?使用如下指令: 
CacheIgnoreQueryString On 
Apache 的缓存系统不仅可以缓存服务器本身的文件,也可以缓存通过代理得到的内容,对了,Apache 可以像 Squid一样做代理,而且做的还不错,下篇文章就介绍一下 Apache 的代理功能吧。善用 Apache的缓存功能,可以让你的网站速度提升不少。做为一个网站来说,虽然可用的各种缓存方案很多,但在 Web 服务器层做缓存的效率还是很值得一试的。 

更多信息请参考:
http://httpd.apache.org/docs/2.2/caching.html 

 

一个httpd.conf的配置例子:

#-----------------------------begin-------------------------

#一个连接的最大请求数量
MaxKeepAliveRequests 10000
#NT环境,只能配置这个参数来提供性能
<IfModule mpm_winnt.c>
#每个进程的线程数,最大1920。NT只启动父子两个进程,不能设置启动多个进程
ThreadsPerChild 1900
#每个子进程能够处理的最大请求数
MaxRequestsPerChild  10000
</IfModule>


LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so

<IfModule mod_cache.c>
CacheForceCompletion 100
CacheDefaultExpire 3600
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1

<IfModule mod_disk_cache.c>
CacheEnable disk /
CacheRoot c:/cacheroot
CacheSize 327680
CacheDirLength 4
CacheDirLevels 5
CacheGcInterval 4
</IfModule>
<IfModule mod_mem_cache.c>
CacheEnable mem /
MCacheSize 8192
MCacheMaxObjectCount 10000
MCacheMinObjectSize 1
MCacheMaxObjectSize 51200
</IfModule>
</IfModule>

 

#-----------------------------end--------------------------

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Apache PHP利用HTTP缓存协议原理解析及应用

    与静态页面不同,PHP生成的动态内容不能简单地依据文件系统的时间戳进行缓存控制。因此,默认情况下,PHP响应不会包含任何缓存控制信息。为了有效利用缓存,开发者需要明确设置缓存控制策略,以优化客户端和服务端的...

    ApacheServer系统管理员手册下载

    这份"Apache Server系统管理员手册"对于任何想要管理和优化Apache服务器的人来说都是宝贵的资源。手册涵盖了从基础安装到高级配置的各个层面,旨在帮助系统管理员更好地理解和操作Apache服务器。 一、Apache服务器...

    Apache Ignite——新一代数据库缓存系统

    Apache Ignite是一款新一代的数据库缓存系统,它为快速发展的数据存储和处理提供了显著的解决方案。Ignite支持RDBMS、NoSQL和HDFS等多种底层存储系统,以应对大规模数据的存储挑战。 随着数据量的持续增长,如何...

    Apache Server系统管理员手册 (PDG).rar

    《Apache Server系统管理员手册》是一本专门为Apache服务器的系统管理员准备的详尽指南。这本书涵盖了Apache服务器的基础知识、安装配置、安全管理、性能优化以及故障排查等多个方面,旨在帮助读者全面理解并熟练...

    Apache Server系统管理员手册(PDG)

    Apache服务器是全球最广泛使用的Web服务器软件之一,它开源、免费且高度可定制,因此深受开发者和系统管理员的喜爱。这份“Apache Server系统管理员手册(PDG)”涵盖了从安装配置到日常维护的所有关键知识点,旨在...

    apache ignite实现mybatis二级缓存所需要的jar包

    Apache Ignite是一款开源的内存数据网格系统,它提供了一个分布式内存计算平台,支持数据库缓存、实时分析以及复杂事件处理等功能。在MyBatis中,二级缓存是提高数据库访问性能的重要手段,它可以将SQL查询结果存储...

    tomcat缓存

    为了更高效地利用内存,可以考虑实现分级缓存,比如结合Redis或Memcached等分布式缓存系统,将Tomcat缓存作为第一级,分布式缓存作为第二级,提高缓存的命中率和可扩展性。 #### 3.2 缓存策略调整 根据应用的访问...

    Apache Server 系统管理员手册

    15. **性能调优与最佳实践**:熟悉Apache服务器性能调优的策略和业界最佳实践,例如内存配置、缓存策略、Gzip压缩等。 以上只是Apache服务器系统管理员需要掌握的一部分知识,实际工作中还需要根据具体业务需求和...

    php缓存技术总结

    六、Apache缓存模块 Apache服务器自身支持缓存模块,可以配置httpd.conf来开启缓存功能。服务器通过配置可以缓存特定的网页内容,提高响应速度。当网站外接cache或squid服务器进行Web加速时,需要激活Apache的mod_...

    Apache Server系统管理员手册

    《Apache Server系统管理员手册》是每位负责管理和维护Apache服务器的专业人士不可或缺的参考资料。本手册涵盖了从安装配置到优化和安全防护的全方位知识,旨在帮助读者深入理解和掌握Apache服务器的运作机制。 1. ...

    Java对象缓存系统的实现,实现了LRU算法,并可以进行集群同步

    在IT行业中,缓存系统是优化应用程序性能的关键技术之一,特别是在处理大量数据时。Java对象缓存系统的实现涉及到了内存管理、数据结构以及分布式通信等多个领域。本项目实现了LRU(Least Recently Used)算法,这是...

    基于PHP的Wordpress专用Redis缓存系统源码.zip

    Redis是一款高性能的键值存储服务,它支持多种数据结构,如字符串、哈希、列表、集合和有序集合,非常适合用作缓存系统。通过将WordPress的部分数据存储到Redis中,可以显著减少对MySQL数据库的访问,从而加快页面...

    Spring MVC+Mybatis+Ehcache+Apache Shiro+Bootstrap整合开发java仓库管理系统源码

    Ehcache是一个广泛使用的内存缓存系统,它可以提高应用性能,减少对数据库的访问。在仓库管理系统的场景下,Ehcache可能被用于存储频繁访问的数据,如热门商品信息,以减少数据库查询,提高响应速度。同时,Ehcache...

    javaeye Robbin 论缓存技术

    4. **Web服务器缓存**:Web服务器如Nginx、Apache等可以缓存静态文件,减少对应用服务器的压力。 5. **客户端浏览器缓存**:浏览器会缓存网页资源,减少对服务器的请求,提高页面加载速度。 **操作系统缓存** - ...

    平台化CDN基础架构——ATS缓存系统

    平台化CDN基础架构——ATS缓存系统:深入解析与展望 随着互联网的快速发展,内容分发网络(CDN)已成为保障用户体验、提升网站性能的关键技术。尤其在光纤时代,用户带宽大幅提升,移动设备普及,以及UGC(用户生成...

    Apache 2.4.39 Win64

    Apache 2.4.39 Win64 是一个专为Windows操作系统设计的最新版本的Apache HTTP服务器。这个版本是基于Apache HTTP服务器项目,一个开放源码的Web服务器软件,广泛应用于互联网上的网站托管。它的Win64版本是针对64位...

    apache2.4.35,apache2.4.23

    在描述中提到的".zip"文件"apache2.4.35.zip"和"apache2.4.23.zip",通常包含了Apache服务器的源代码或者二进制安装包,解压后可以直接在支持的系统上使用。用户可以根据自己的需求选择合适的版本进行部署。压缩包子...

    基于mybatis自定义缓存配置Redis

    本篇文章将深入探讨如何在MyBatis中自定义缓存配置,整合第三方缓存系统Redis。 首先,理解MyBatis的缓存机制。MyBatis提供了两级缓存:一级缓存是SqlSession级别的,存在于SqlSessionFactory内部,而二级缓存是...

    JBOSS与APACHE的整合

    也可以将APACHE服务器作为缓存服务器,缓存静态网页,以减少JBOSS服务器的压力。 JBOSS与APACHE的整合可以提高Web应用程序的性能和可扩展性,提高系统的可靠性和安全性,同时也可以降低系统的成本和复杂度。

    jcs缓存所需要的包

    JCS(Java Caching System)是Apache软件基金会开发的一个开源的、分布式的对象缓存系统,主要用于提高应用程序的性能和可伸缩性。它通过存储经常访问的数据到内存中,减少了对数据库或其他资源的访问,从而加快了...

Global site tag (gtag.js) - Google Analytics