`
wzucxd
  • 浏览: 26607 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

页面片段缓存方案介绍(OSCache,Velocity自定义标签,Varnish+ESI)

 
阅读更多

1.OSCache

OSCache是一个使用较多的高性能J2EE缓存框架,适用于任何JAVA应用程序的普通缓存解决方案。可以不受限制的缓存部分jsp页面或http请求;支持永久缓存,将缓存内存随意写入硬盘;支持集群-集群缓存数据,而不需要修改代码;控制缓存对象过期时间,可插入式刷新策略;

oscache-2.1.jar;commons-logging-api-1.1.jar;log4j-1.2.11.jar

配置OSCache环境

CacheFilter只对http 200的页面请求做处理,不对其他状态做缓存处理

web.xml

oscache.properties

目前新版本的OSCache已经支持集群分布式

实现分布式环境消息同事,目前比较流行的2中做法:1.JavaGroups[http://www.jgroups.org/];2.JMS 这2种底层都实现了广播通信。

采用javaGroup,我们可以看下官方文档,使用下面的方式配置

拷贝oscache.tld到WEB-INF下

//index.jsp,用来刷新指定页面缓存

//newinfo.jsp 页面缓存内容

cache标签(其他属性使用可以在官方文档上查阅或者http://praguesky.blog.163.com/blog/static/232970042007415731504/
这是OSCache提供的标签库中最重要的一个标签,包括在标签中的内容将应用缓存机制进行处理,处理的方式将取决于编程者对cache标签属性的设置。
第一次请求到达时,标签中的内容被处理并且缓存起来,当下一个请求到达时,缓存系统会检查这部分内容的缓存是否已经失效,主要是以下几项:
(1)缓存时间超过了cache标签设置的time或者duration属性规定的超时时间
(2)cron属性规定的时间比缓存信息的开始时间更晚
(3)标签中缓存的内容在缓存后又被重新刷新过
(4)其他缓存超期设定
如果符合上面四项中的任何一项,被缓存的内容视为已经失效,这时被缓存的内容将被重新处理并且返回处理过后的信息,如果被缓存的内容没有失效,那么返回给用户的将是缓存中的信息。
cache标签的常用属性说明:

key

标识缓存内容的关键词。在指定的作用范围内必须是唯一的。默认的key是被访问页面的URI和后面的请求字符串。可以在同一个页面中使用很多cache标签而不指定他的key属性,这种情况下系统使用该页面的URI和后面的请求字符串,另外再自动给这些key增加一个索引值来区分这些缓存内容。但是不推荐采用这样的方式。

scope

缓存发生作用的范围,可以是application或者session。默认为application。

time

缓存内容的时间段,单位是秒,默认是3600秒,也就是一个小时,如果设定一个负值,那么这部分被缓存的内容将永远不过期。

duration

指定缓存内容失效的时间,是相对time的另一个选择,可以使用简单日期格式或者符合USO-8601的日期格式。如:duration='PT5M' duration='5s'等。

cron

指定缓存内容失效表达式,见“Cron表达式基本语法”。

refresh

false 或者true。如果refresh属性设置为true,不管其他的属性是否符合条件,这部分被缓存的内容都将被更新,这给编程者一种选择,决定什么时候必须刷新。

mode

如果不希望被缓存的内容增加到给用户的响应中,可以设置mode属性为"silent"。此时被缓存的部分不在页面上显示,而其它任意的mode属性值都会将缓存的部分显示到页面上。

groups

指定当前cache标签所属的组,可使用“,”分割组名。这样就可以对缓存项进行分组了。如果缓存项依赖于应用的其它部分或其它数据,分组就有了用武之地——当这种依赖改变时(刷新相关的组),这个组的所有缓存项都将过期。

language

使用ISO-639定义的语言码来发布不同的缓存内容(under an otherwise identical key)。要在一个多语言网站上同一段JSP代码不同用户的参数提供不同的语言时,这个属性会很有用。

refreshpolicyclass

指定自定义的刷新策略类的全限定类名。这个类继承自com.opensymphony.oscache.web.WebEntryRefreshPolicy

refreshpolicyparam

指定任意需要传给refreshpolicyclass的参数。如果没有指定refreshpolicyclass,则这个值不起作用。

这些属性可以单独使用,也可以根据需要组合使用。

2.Velocity

http://news.cnblogs.com/n/100285/

3.Varnish+ESI

image

varnish安装

wget http://repo.varnish-cache.org/source/varnish-2.1.5.tar.gz
tar xzvf varnish-2.1.5.tar.gz
./configure -prefix=/usr/local/varnish
make
make install

如果提示缺少 'libpcre'

yum -y install automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig

varnish自己并没有提供服务,只是一个缓存服务器(Squid???)

Varnish的默认配置文件在/usr/local/varnish/etc/varnish/default.vcl(这个配置文件指示所使用的后端服务器)

./sbin/varnishd -a 0.0.0.0:80 -f /usr/local/varnish/ect/varnish/default.vcl -s malloc,500M
//welcome.jsp
//esi.jsp
对于<esi:include src="http://192.168.0.100:8080/oscache_test/welcome.jsp"/>在这种情况varnish会做esi解析,但没有缓存下来

varnish将所有的object存于一个单独的大文件中,在工作进程初始化时候这个文件就会被加载到内存中。varnish在内存中的实现和“文件系统”有点相似,具有分配、释放、修剪、合并等功能;这种设计避免了软件与系统对内存控制的冲突;像squid、oscache会将每个object存在一个小文件,相对来说,varnish的大文件可以减少文件系统频繁的操作,这就需要记录每个object在内存的偏移量,定期检查释放内存,编程难度增加,却可以提高性能。

ps -aux|grep "varnish"

我们可以看到varnish启动或有2个进程 master(management)进程和child(worker)进程。master读入存储配置命令,进行初始化,然后fork,监控child。child则分配线程进行cache工作,child还会做管理线程和生成很多worker线程。

child进程主线程初始化过程中,将存储大文件整个加载到内存中,如果该文件超出系统的虚拟内存,则会减少原来配置mmap大小,然后继续加载,这时候创建并初始化空闲存储结构体,放在存储管理的struct中,等待分配。

接着,varnish某个负责接口新http连接的线程开始等待用户,如果有新的http连接,但是这个线程只负责接收,然后唤醒等待线程池中的work线程,进行请求处理。

worker线程读入uri后,将会查找已有的object,命中直接返回,没有命中,则会从后端服务器中取出来,放到缓存中。如果缓存已满,会根据LRU算法,释放旧的object。

对于释放缓存,有一个超时线程会检测缓存中所有object的生命周期,如果缓存过期(ttl),则删除,释放相应的存储内存。

存储结构体(定义在varnish/bin/varnishd/strorage_file.c)
基本结构体,缓存文件中一小块连续的内存,用来分配相应大小的http object(定义在strorage_file.c)
分享到:
评论

相关推荐

    oscache+ssi+velocity

    它可以缓存整个页面、部分页面(如JSP片段)、甚至业务逻辑处理的结果。osCache提供了灵活的缓存策略,如时间过期、手动清除、基于内存大小的自动清理等,使得开发者可以根据需求进行定制。 其次,`SSI`全称为...

    ssh2(事务,AOP,IoC即DI)+EhCache+oscache+proxool+MySQL+SiteMesh+Gzip例子

    jQuery+json+struts2+spring3(事务,AOP,IoC即DI)+hibernte3+EhCache+oscache+proxool+MySQL+SiteMesh+Gzip lj例子

    基于OSCache的页面缓存(收藏)

    **基于OSCache的页面缓存技术详解** 在Web应用程序中,页面缓存是一种常见的优化策略,它可以显著提高网站性能,减少服务器压力,并提供更快的用户体验。OSCache是Apache软件基金会的开源项目,它是一个高性能、...

    oscache,缓存机制的使用

    oscache是一款开源的Java缓存解决方案,其核心功能在于能够缓存Web应用中的动态内容,从而显著提升页面加载速度和服务器资源利用率。它通过在服务器端存储已生成的动态数据,避免了频繁的数据查询和页面渲染,有效...

    SSM的整合+OScache页面缓存+freemark模板

    在SSM项目中引入OScache,可以在服务器端对经常访问的页面进行缓存,提高页面加载速度,减轻服务器压力。配置OScache主要包括设置缓存策略、缓存范围以及缓存失效策略等。 【Freemarker模板】 Freemarker是一个基于...

    oscache缓存技术

    osCache是一款广泛应用于Java应用程序中的开源缓存解决方案,由OpenSymphony团队开发。它提供了一种高效、可扩展的方式来管理应用程序中的数据缓存,从而提高系统的性能和响应速度。osCache的核心功能包括缓存对象、...

    基于OSCache的页面缓存

    【基于OSCache的页面缓存】是Web应用中一种有效的性能优化策略,它涉及到缓存技术、分布式系统以及系统开发等多个领域。OSCache是开源的Java缓存框架,能够帮助开发者实现高效的页面和数据缓存,从而降低数据库的...

    OsCache缓存框架使用示例

    总结来说,OsCache是一个强大的缓存解决方案,尤其适用于Java Web应用。通过合理地使用OsCache,我们可以优化数据访问,提高系统的响应速度,同时减轻服务器的压力。在天气预报的示例中,OsCache不仅简化了代码,还...

    OSCache缓存技术

    OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存...

    oscache-JSP缓存

    osCache支持缓存页面片段、整个页面、Java对象或者自定义数据结构。 **2. osCache的工作原理** osCache采用键值对的形式存储数据,当请求到来时,首先检查缓存中是否存在所需数据。如果存在,直接从缓存返回,无需...

    oscache的例子

    OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存...

    oscache缓存

    osCache是Java平台上的一个高效的缓存解决方案,主要用于在应用程序中缓存数据,以提高性能和减少数据库的负载。这个工具特别适用于那些需要频繁访问但更新不频繁的数据,例如经常查询但很少更改的数据库记录。...

    oscache-java缓存框架

    - **Java缓存框架**:在Java环境中,缓存框架如osCache提供了一套完整的解决方案,帮助开发者轻松集成和管理缓存。 2. **osCache的核心功能** - **对象缓存**:osCache允许开发者将Java对象直接放入缓存,便于...

    hibernate+oscache实现二级缓存实例

    为了提高系统性能,通常会采用缓存技术来减少对数据库的直接访问,而OSCache就是一种广泛使用的开源缓存解决方案。本实例将介绍如何结合Hibernate和OSCache实现二级缓存,以优化应用程序的性能。 一级缓存是...

    oscache缓存技术入门实例

    osCache 是一个开源的、基于Java的缓存框架,它为Java应用程序提供了高效且可配置的内存缓存功能。在本文中,我们将深入探讨osCache的基本概念、工作原理以及如何在实际项目中进行配置和使用。 一、osCache基本概念...

    oscache缓存中间件

    OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存...

    oscache缓存配置

    osCache是Java平台上的一个高效、易用的缓存解决方案,它由Tuckey组织开发,广泛应用于各种Web应用中,以提高数据读取速度,减轻数据库压力。osCache的核心功能是提供了一个内存中的对象缓存系统,通过将常用数据暂...

Global site tag (gtag.js) - Google Analytics