ehcache缓存页面

ehcache缓存页面
ehcache缓存页面

/**

*作者:张荣华

*日期:2007-9-26

**/

关于缓存的话题,在坛子里已经有很多讨论,简单的来说,如果一个应用中80%的时间内都在访问20%的数据,那么,这时候就应该使用缓存了。这个和长尾理论正好相悖,其实也不是相悖,只是不同的理论使用的场景不同。在80/20原则生效的地方,我们都应该考虑是否可以使用缓存。但即使是这样,缓存也有不同的用法,举个例子,一个网站的首页估计是被访问的次数最多的,我们可以考虑给首页做一个页面缓存,而如果在某个页面上,比如

(假设javaeye是使用hibernate,说javaeye的java版区只有前几个页面是访问最频繁的,

当然这只是假设,我们都知道javaeye是使用ror开发的)那么我们就可以考虑给java版区的record做二级缓存了,因为二级缓存中是按照对象的id来保存的,所以应该来说这前面几页使用的对象会一直存在于缓存之中(如何使用hibernate的二级缓存坛子上也有介绍)。由此可见不同的页面的缓存策略有可能有天壤之别。

本文的目的就是上面所讲的两种情况之一,页面缓存。毫无疑问,几乎所有的网站的首页都是访问率最高的,而首页上的数据来源又是非常广泛的,大多数来自不同的对象,而且有可能来自不同的db,所以给首页做缓存是一个不错的主意,那么主页的缓存策略是什么样子的呢,我认为应该是某个固定时间之内不变的,比如说2分钟更新一次。那么这个缓存应该做在什么地方呢,让我们来看一下,假设您的应用的结构是page-filter-action-service-dao-db,这个过程中的-的地方都是可以做缓存的地方,根据页面缓存的特征,应该把页面缓存做到尽量靠近客户的地方,就是在page和filter之间,这样的优点就是第一个用户请求之后,页面被缓存,第二个用户再来请求的时候,走到filter这个请求就结束了,无需再走后面的action-service-dao-db。带来的好处是服务器压力的减低和客户段页面响应速度的加快。

那么我们来看一下如何使用ehcache做到这一点。

在使用ehcache的页面缓存之前,我们必须要了解ehcache的几个概念,

1 timeToIdleSeconds,多长时间不访问该缓存,那么ehcache就会清除该缓存。

2 timeToLiveSeconds,缓存的存活时间,从开始创建的时间算起。

看到这里,我们知道,首页的页面缓存的存活时间,我们定的是2分钟,那么也就是说我们的timeToLiveSeconds应该设置为120,同时我们的timeToIdleSeconds最好也设置为2分钟,或者大于2分钟。我们来看一下下面这个配置,这个配置片段应该放到ehcache.xml 中:

maxElementsInMemory="10"

maxElementsOnDisk="10"

eternal="false"

overflowToDisk="true"

diskSpoolBufferSizeMB="20"

timeToIdleSeconds="10"

timeToLiveSeconds="10"

memoryStoreEvictionPolicy="LFU"

/>

SimplePageCachingFilter是缓存的名字,maxElementsInMemory表示内存中SimplePageCachingFilter缓存中元素的最大数量为10,maxElementsOnDisk是指持久化该缓存的元素到硬盘上的最大数量也为10(),eternal=false意味着该缓存会死亡。overflowToDisk=true意思是表示当缓存中元素的数量超过限制时,就把这些元素持久化到硬盘,如果overflowToDisk是false,那么maxElementsOnDisk的设置就没有什么意义了。memoryStoreEvictionPolicy=LFU是指按照缓存的hit值来清除,也就是说缓存满了之后,新的对象需要缓存时,将会将缓存中hit值最小的对象清除出缓存,给新的对象腾出地方来了(文章最后有ehcache中自带的3种缓存清空策略的介绍)。

接着我们来看一下SimplePageCachingFilter的配置,

indexCacheFilter

net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter

indexCacheFilter

*index.action

就只需要这么多步骤,我们就可以给某个页面做一个缓存的,把上面这段配置放到你的web.xml中,那么当你打开首页的时候,你会发现,2分钟才会有一堆sql语句出现在控制台上。当然你也可以调成5分钟,总之一切都在控制中。

好了,缓存整个页面看上去是非常的简单,甚至都不需要写一行代码,只需要几行配置就行了,够简单吧,虽然看上去简单,但是事实上内部实现却不简单哦,有兴趣的话,大家可以看看SimplePageCachingFilter继承体系的源代码。

上面的配置针对的情况是缓存首页的全部,如果你只想缓存首页的部分内容时,你需要使用SimplePageFragmentCachingFilter这个filter。我们看一下如下片断:

indexCacheFilter

net.sf.ehcache.constructs.web.filter.SimplePageFragmentCachingFilter

indexCacheFilter

*/index_right.jsp

这个jsp需要被jsp:include到其他页面,这样就做到的局部页面的缓存。这一点貌似没有oscache的tag好用。

事实上在cachefilter中还有一个特性,就是gzip,也就是说缓存中的元素是被压缩过的,如果客户浏览器支持压缩的话,filter会直接返回压缩过的流,这样节省了带宽,把解压的工作交给了客户浏览器,如果客户的浏览器不支持gzip,那么filter会把缓存的元素拿出来解压后再返回给客户浏览器(大多数爬虫是不支持gzip的,所以filter也会解压后再返回流),这样做的优点是节省带宽,缺点就是增加了客户浏览器的负担(但是我觉得对当代的计算机而言,这个负担微乎其微)。

好了,如果你的页面正好也需要用到页面缓存,不防可以考虑一下ehcache,因为它实在是非常简单,而且易用。

总结:ehcache是一个非常轻量级的缓存实现,而且从1.2之后就支持了集群,目前的最新版本是1.3,而且是hibernate默认的缓存provider。虽然本文是介绍的是ehcache 对页面缓存的支持,但是ehcache的功能远不止如此,当然要使用好缓存,对JEE中缓存的原理,使用范围,适用场景等等都需要有比较深刻的理解,这样才能用好缓存,用对缓存。

最后复习一下ehcache中缓存的3种清空策略:

1 FIFO,first in first out,这个是大家最熟的,先进先出,不多讲了

2 LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。

2 LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

Ehcache 2 缓存区配置详解

Ehcache 2 缓存区配置详解 第1章Ehcache简介 EhCache是一个开放源码的,基于标准的高速缓存系统。Ehcache可以显著提高应用性能,降低数据库负载,简化应用扩展。Ehcache健壮、功能齐全,也历经了众多应用考验,使得它成为使用最广泛的基于Java的缓存系统。 Ehcache可以支持从进程内的一个或多个节点的部署方式到进程内与进程外混合、高达TB 大小的高速缓存。 Ehcache目前由Terracotta公司维护,使用Apache 2 许可证。 Ehcache截止目前最新版本为2.6。支持多种方式缓存: ●Standalone模式。嵌入应用进程内。单点,多节点间无沟通。 ●Replication模式。嵌入应用内部,通过RMI或JGroup或JMS进行节点同步。 ●Cache Server模式。作为独立缓存服务器,提供REST与WebService接口供访 问。 ●Distributed Caching模式。采用Terracotta Server Array实现高可用的分布式 缓存。 Standalone与Replication均是较传统的使用方式,很多场景下难以满足动态基础设施环境下应用弹性的要求。Cache Server使得缓存服务可以容易的进行水平扩展,但是基于REST与WebService的访问方式降低了缓存访问的效率,不太适合对缓存实时性要求较高的场景。Distributed Caching模式提供了进程内与进程间缓存较理想的结合模式,支持水平扩展,高可用,对网络依赖程度较低,可以很好适应应用弹性伸缩,是动态基础设施条件下较理想的缓存模式。 第2章Ehcache 2 缓存区配置 Ehcache默认配置文件在Ehcache客户端的classpath根目录下,名为ehcache.xml。典型的配置文件如下:

各类型网站-缓存解决方案

门户类随着互联网不断普及和飞速成长,门户网站已经成为网民获取信息的重要通道。每天大量网民点击访问,网站速度和网络稳定等方面面临着严峻挑战: 1、网站运维技术复杂 2、网站影响力大,对网络灾备要求高 3、网络服务众多,传输机制复杂 4、用户众多,分布广泛,网络情况复杂,响应速度要求高 5、易遭受攻击,网站安全性和稳定性要求高 某门户网站高标准规划、高起点建设,以新闻、信息、下载内容为主,文字、图片与视频、音频结合,目前拥有30 多个频道和子网站。随着自身的不断成长,网站也面临了性能和可用性方面的问题和挑战: 一旦IDC 内的服务器停止工作或ISP 服务中断,如何保证网站始终在线?必须通过更快的响应速度来满足客户的需求,如何为客户提供最及时的响应?应用服务器由于服务器硬件的稳定性、流量压力超载、网络攻击等情况,经常会意外宕机,如何保证网络应用的7 ×24 小时持续性服务? 为解决以上问题,该门户网站使用了PowerCDN服务,确保了关键任务应用的快速、安全和容错性运行。无论该网站的客户所处全球位置如何,PowerCDN的Smart DNS都可将他们引导到具有最佳性能的可用PowerCDN节点,页面响应速度明显提升;同时源站隐藏在CDN节点后,大大减少来自互联网上的直接安全威胁;遇到热点事件的突发流量也不必为此单独购置专门的设备。 sns社区类随着越来越多的个人用户参与到互联网内容的管理、维护、存储、上传、分发等价值链条中,互联网逐渐转变成一个分散存储、读与写并存的多中心交互式平台,社会网络(sns)作为Web2.0的典型应用之一更是遍地开花。由于内容的生产者和组织者越来越多和越来越分散,内容的多节点上传几乎与自上而下的下发变得一样普遍,于是本已拥塞不堪的网络带宽更显拥挤,在现有带宽条件下,如何提高网站接入速度和响应速度,进而改善用户体验,真正做到以用户为中心?这是所有sns社区类网站都必须面对并给出满意解答的一道课题。 1、网站交互性超强 2、文件种类和数量多而且复杂 3、安全保密性要求高

spring配置文件各个属性详解

spring配置文件各个属性详解 分类:spring 2012-08-09 11:25 9316人阅读评论(2) 收藏举报springaophibernateattributesxhtmlwebsphere 目录(?)[+]一、引用外部属性文件 classpath:mail.properties classpath:jdbc.properties 我们定义了一个PropertyPlaceholderConfigurer类的实例,并将其位置属性设置为我们的属性文件。该类被实现为Bean工厂的后处理器,并将使用定义在文件中的属性来代替所有的占位符(${...}value)。 注意: 而在spring2.5的版本中提供了一种更简便的方式,如: 1. 这样以后要使用属性文件中的资源时,可以使用${属性名}来获得。 二、常用数据源的配置 第一种是:DBCP数据源,(需要加入2个jar文件,在spring中的lib下 jakarta-commons/commons-dbcp.jar和commons-pools.jar)主要配置如下:

PHP开发常用的五种缓存技术

1、全页面静态化缓存 也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。此种方式,在CMS系统中比较常见,比如dedecms; 一种比较常用的实现方式是用输出缓存: Ob_start() ******要运行的代码******* $content = Ob_get_contents(); ****将缓存内容写入html文件***** Ob_end_clean(); 2、页面部分缓存 该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示;可以使用类似于ob_get_contents的方式实现,也可以利用类似ESI之类的页面片段缓存策略,使其用来做动态页面中相对静态的片段部分的缓存(ESI技术,请baidu,此处不详讲)。该种方式可以用于如商城中的商品页; 3、数据缓存 顾名思义,就是缓存数据的一种方式;比如,商城中的某个商品信息,当用商品id去请求时,就会得出包括店铺信息、商品信息等数据,此时就可以将这些数据缓存到一个php 文件中,文件名包含商品id来建一个唯一标示;下一次有人想查看这个商品时,首先就直接调这个文件里面的信息,而不用再去数据库查询;其实缓存文件中缓存的就是一个php数组之类; 4、查询缓存 其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示; 5、按内容变更进行缓存 这个也并非独立的缓存技术,需结合着用;就是当数据库内容被修改时,即刻更新缓存文件; 比如,一个人流量很大的商城,商品很多,商品表必然比较大,这表的压力也比较重;我们就可以对商品显示页进行页面缓存;当商家在后台修改这个商品的信息时,点击保存,

Spring下Ehcache缓存的配置文档说明

Ehcache缓存单机环境配置 以下的配置是针对DAO层而言的,Controller层不需要做配置。 步骤一:配置pom.xml文件 在文件中引入以下几个依赖项: com.googlecode.ehcache spring-annotations-osgi 1.1.2 commons-codec commons-codec 1.4 net.sourceforge.ehcache https://www.360docs.net/doc/d617313985.html,.sf.ehcache 2.2.0 步骤二:配置template.mf 在”Import-Package”之后”Excluded-Exports”之前引入三条配置项,注意包名之前要留一个空格,如下红色字体显示部分: Import-Package: org.springframework.context.config;version="[3.0.5,4)", com.googlecode.ehcache.annotations;version="1.1.0", com.googlecode.ehcache.annotations.key;version="1.1.0", org.springframework.aop.aspectj.autoproxy Excluded-Exports: com.mpr.mprsp.mcrc.service.mcrs.publisher.internal.* 步骤三:配置Spring的配置文件applicationContext.xml: 首先在文件的头部加上ehcache的dtd声明,然后配置ehcache缓存管理器。具体配置如下红色字体所示: (二)、客户端方法: meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。meta 的属性有两种:name和http-equiv。name 属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和keywords(分类关键词),所以应该给每页加一个meta值。比较常用的有以下几个: name 属性 1、<meta name="Generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等; 2、<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词; 3、<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容; 4、<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者; 5、<meta name="Robots" contect="all|none|index|noindex|follow|nofollow"> 其中的属性说明如下: 设定为all:文件将被检索,且页面上的链接可以被查询; 设定为none:文件将不被检索,且页面上的链接不可以被查询; 设定为index:文件将被检索; 设定为follow:页面上的链接可以被查询; 设定为noindex:文件将不被检索,但页面上的链接可以被查询; 设定为nofollow:文件将不被检索,页面上的链接可以被查询。 http-equiv属性 1、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80"> 和<meta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语言;又如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集; 2、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定时让网页在指定的时间n

Java分布式架构

介绍 1. 项目核心代码结构截图 jeesz-utils jeesz-config jeesz-framework jeesz-core-cms jeesz-core-gen jeesz-core-bookmark

jeesz-core-act jeesz-core-oa jeesz-core-test jeesz-core-scheduler jeesz-core-task jeesz-web-admin jeesz-web-service jeesz-web-scheduler jeesz-web-task jeesz-web-bookmark jeesz-facade-bookmark jeesz-service-bookmark jeesz-facade-task jeesz-service-task jeesz-web-mq-task 特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化 2. 项目依赖介绍

zheng-环境搭建及系统部署文档20170213(三版)

1Een 项目描述 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构:内容管理系统(门户、博客、论坛、问答等)、统一支付中心(微信、支付宝、在线网银等)、用户权限管理系统(RBAC细粒度用户权限、统一后台、单点登录、会话管理)、微信管理系统、第三方登录系统、会员系统、存储系统 https://www.360docs.net/doc/d617313985.html,/zhengAdmin/src/ 2项目组织结构

3项目模块图 4项目使用到的技术4.1后端技术 Spring Framework SpringMVC: MVC框架

Spring secutity|Shiro: 安全框架 Spring session: 分布式Session管理MyBatis: ORM框架 MyBatis Generator: 代码生成 Druid: 数据库连接池 Jsp|Velocity|Thymeleaf: 模板引擎ZooKeeper: 协调服务 Dubbo: 分布式服务框架 TBSchedule|elastic-job: 分布式调度框架Redis: 分布式缓存数据库 Quartz: 作业调度框架 Ehcache: 缓存框架 ActiveMQ: 消息队列 Solr|Elasticsearch: 分布式全文搜索引擎FastDFS: 分布式文件系统 Log4J: 日志管理 Swagger2: 接口文档 sequence: 分布式高效ID生产 https://www.360docs.net/doc/d617313985.html,/yu120/sequence AliOSS|Qiniu: 云存储 Protobuf|json: 数据传输 Jenkins: 持续集成工具 Maven|Gradle: 项目构建管理

EHCache介绍

EHCache介绍 简介 系统缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能. 缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小,可以执行失效算法,可以在内存满了的时候,按照最少访问等算法将缓存直接移除或切换到硬盘上。 Ehcache从Hibernate发展而来,逐渐涵盖了Cahce界的全部功能,是目前发展势头最好的一个项目。具有快速,简单,低消耗,依赖性小,扩展性强,支持对象或序列化缓存,支持缓存或元素的失效,提供LRU、LFU 和FIFO缓存策略,支持内存缓存和磁盘缓存,分布式缓存机制等等特点。 2009年8月Terracotta公司并购了开源缓存项目Ehcache, Terracotta 公司的产品 Terracotta 是一个 JVM 级的开源群集框架,提供 HTTP Session 复制、散布式缓存、POJO 群集、跨越集群的JVM 来完成散布式使用顺序协调。并购后EhCache 首要的改进都集中在跟Terracotta 框架的集成上,这是一个真实意义上的企业级缓存处置方案。Ehcache1.7版本上首次加入了ehcache-terracotta组件模块,想利用terracotta来实现更方便的集群操作。 Overview Ehcache是一个开源的,用于提高访问性能的标准高速缓存,它抛弃了数据库同时易于扩展。Ehcache拥用强大的,可靠和完整的功能,这已成为最广泛使用的基于Java的高速缓存。 Ehcache可以实现TB级的高速缓存管理,可配置多个缓存节点。对于需要互联的分布式缓存应用,Ehcache的使用开源的Terracotta Sever的阵列。 Ehcache是Terracotta公司的一个长期开发、维护和支持的专业开源项目。有效基于Apache 2 license。除了开源的ehcache,Terracotta公司还提供企业版的Ehcache全天候的专业支持,咨询和培训。

网页视频下载方式大全

网页音视频下载方式大全(编辑完成) 优酷、奇艺、搜狐等网站上有不少好看的、有用的、喜欢的视频,但下载却提示要安装客户端,而绝大多数人都不会只呆在一家视频网站上,要都安装客户端,未免太过麻烦,而且很多时候也基本用不到。那么有没有办法直接下载网页视频?答案是肯定的。 目前,我们可以通过插件、软件、网站和浏览器来下载网页视频。这些东西使用的方式主要有两类:一是从浏览器缓存中提取视频缓存;二是通过分析网页元素等方式查找网页视频的下载地址。下面我就将通过插件下载、软件下载、浏览器下载来介绍网页音视频的下载方式。 一、通过插件来下载网页中的音视频 1、火狐插件 说到通过插件下载网页中的音视频,最有名的果断是火狐上的NetVideoHunter Video Downloader。这款插件目前只开发了火狐版,该插件支持火狐3.0以后的 所有版本。它能从火狐的缓存中提取视频,能够从几乎任何网站上提取视频、音频的下载链接并下载,能在独立窗口中播放音视频,并且,即使是优酷之类的将长视频分段保存的网站,它也能嗅探到所有的视频片段,不会像某些工具只能嗅探到部分。 当页面有音视频时,火狐右下角NetVideoHunter的图标上就会显示网页中包含的音视频数量,点击弹出下载和独立播放窗口。下图为截图:

此外火狐上还有FlashGot、Easy YouTube Video Downloader等优秀插件也能 嗅探到网页中的音视频。 2、chrome及基于chromium开发的浏览器上的插件 作为浏览器市场上的有力竞争者,chrome上也有视频提取的插件:FVD Video Download,它同样能够嗅探到几乎所有网站上的音视频,包括优酷等分段存储 加载的音视频,并调用浏览器自带下载来下载音视频(调用迅雷旋风等需要浏览器或其他插件支持)。 当嗅探到页面上有音视频时,FVD Video Download在插件栏上的图标会变为蓝色的箭头(不然为带红×的灰色箭头),点击即可下载。下图是截图:

[实用参考]代码说明文档.doc

简介FHQ313596790 Springmvc+mybatis组合框架 Oracle和mysql俩版本 1各包说明 1.1Src 1.controller:业务处理包(日常代码维护主要包) 2.dao:增删改查的接口(无需操作,不用管它) 3.entity:实体类包(存放实体类) 4. filter:登录顾虑验证器(可以在此添加一段代码,让tomcat启动后立即自动执 行 需要配置web.Gml 5.interceptor:session有效期验证 请求的连接中GGG.do不包含login,logout,code,app 等字符的,都会被判断session存在与否,否:跳转到登录,是:跳转到相应地址 6.Listener:在web容器启动时由WebAppConteGtListener初始化 7.Plugin:分页插件(已经处理好,无需更改)

8.Listene:MyEGceptionResolver异常处理 9.Util所有工具类(发邮件,发短信,日期格式化等) 1.2resources 1.mybatis:对应的配置文件 2.spring:spring的配置文件ApplicationConteGt.Gml 3.log4j日志处理配置,可设置生成日志文件到硬盘的某个目录下 4.dbconfigerties:数据库链接池配置 5.shior配置,在spring/ApplicationConteGt.Gml 1.2WebRoot admin:存放配置文件,代码生成器生成的代码(相对tomcat的目录) plugins:插件存放目录 static:jscssimg等存放目录 jsp:在WEB-INF目录下 增删改查流程 增加:(form表单提交数到后台在存入数据库) form表单action=”user/saveU.do” 1.比如新增用户,”user”对应的是

java应用服务器集群环境下代码编写要注意的问题

java应用服务器集群环境下代码编写关注点 J2EE架构下,软件的部署环境为集群的情况很多,所以针对集群环境的软件 开发非常重要,所以我们在编码过程中要超前思考,以免加大后期的工作量。了解集群 什么是集群: web应用服务器集群系统,是由一群同时运行同一个web应用的服务器组成的集群系统,在外界看来,就像是一个服务器一样。为了均衡集群服务器的负载,达到优化系统性能的目的,集群服务器将众多的访问请求,分散到系统中的不同节点进行处理。从而实现了更高的有效性和稳定性,而这也正是基于Web的企业应用所必须具备的特性。 集群技术的特点 高可靠性和高可用性:通过集群技术组成的系统,可以确保数据和应用程序对最终用户的高可用性和高可靠性,也就是说当主节点上的系统崩溃时,冗余节点就从替补角色转换到正式角色,并自动投入应用,从而保证了系统运行的不间断。或者检测某一个空闲服务器,将请求分发给它,对请求进行处理,而且这一过程对用户来说,是透明的,用户察觉不到! 稳定性和可伸缩性:在系统的处理能力需要增加的时候,除了通过增加集群中每个计算机节点的单机处理能力(如通过增加CPU数量、增加内存大小等手段)外,还可以通过增加集群节点数,即通过向群集添加新的计算机节点,使服务随着处理器的添加而伸缩,从而增大应用程序吞吐量,以达到增加系统的整体处理能力的目的,完成系统的扩容。 Web应用服务器集群结构图,下面例举了weblogic和websphere集群结构图 websphere集群架构图

weblogic集群架构图 排除网络设备,由上面两幅图可以观察到,应用服务器集群包含了三部分

1.Web服务器(Web Server) Web服务器专门处理HTTP请求(request),应用的软件如Apache,IBM HTTP Server,或者自己写的代理服务等等。 2.应用程序服务器(The Application Server) 应用程序服务器是通过很多协议来为应用程序提供(serves)业务逻辑(business logic)。 3.关系数据库系统 4.消息中间件 备注:一定要清楚web服务器与应用程序服务的区别 由图我们来分析一下,集群环境下开发需要注意哪些地方? 1.Session,我们经常用session来封装用户的登录信息,那么如果集群环境下一台机器session中有,一台没用回发生什么样的情况呢?幸好各个应用服务器都有在集群环境下session复制的配置。如果配置请查阅对应的文档。另外web 开发经常用到Webwork,strut2,flex等技术,他们都对sesson的封装。他们是否也能复制呢?还要测试才行,当然理论上是可以的,呵呵!还有有的时候session 要保存到什么位置?也是个问题a)内存,b)文件c)数据库。根据实 际情况来选择吧。 2.Cache,Cache我们经常使用(我这里只说对象级缓存),如:将一些经常用到的数据缓存到内存中。这种情况下和session有些类似。有的人实例化了一个包 含HashMap的一个单例的对象,用来缓存数据,单机环境没什么问题,可是如 果是集群环境呢?会怎样?所有我们引用分布式缓存或者集中式缓存,分布式缓存有很多种如ehcache,jbosscache,oscache等,集中式缓存比较典型的就是memcached。选择分布式还是集中式根据项目的需要来定了。这里就不说了。 3.线程、定时器,如:单机环境下我们写一个单线程,如用来像其他系统上传数 据(这个数据部允许多次上传),如果程序发布在集群环境下回发生什么情况?呵呵。变成多线程了。多个计算机内的单线程同时上传数据。所以这个时候考虑的地方就很多了!!是选择故障转移还是负载均衡都是考虑的范围。定时器也雷 同。可以参考spring quartz 集群解决方案。 4.JDBC,JDBC注意的是数据库集群的情况,如weblogic集群架构图所示,编写程序时,获得JDBC链接可以这样写, Connection con = null; try {

网站性能优化:页面静态化和二级缓存

网站性能优化:页面静态化和二级缓存 2009-08-29 23:41:20| 分类:java | 标签:无|字号大中小订阅 性能方案: 1.页面静态化。只适合那些不会经常发生变化的页面(不适合条件查询和分页)。 对于经常发生变化的内容,如何进行性能优化 2.缓存方案。 1.页面缓存(性能高与二级缓存) 2.业务层缓存(二级缓存,只缓存对象),hibernate二级缓存 页面缓存 1.页面缓存缓存的是servlet向页面输出的html代码,我们使用OsCahe作为页面缓存产品。OsCahe也可以用作二级缓存。 什么是OSCache OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采用的高性能的J2EE 缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。 使用OsCahe如何实现页面全局和局部缓存。 只需要学习几个标签 采用map结构的对象缓存内容,这个缓存的key就是我们请求的路径。以后只要我们访问相同的路径,就可以在map中找到这个缓存的内容。但是如果我们在路径后面加上参数,map 中就找不到了。缓存就不会被使用了。 所以我们可以自己指定缓存的key的名称。 scope可以定义这个缓存的使用范围,session只对同一个会话进行缓存 time指定缓存时间,默认是1个小时。过时以后,旧缓存会丢失,重新建立新的缓存。 refresh:强行清除缓存。里面可以接收el表达式,true表示重新建立缓存。默认为false。 下面是一些示例 我们使用Oscache的标签来进行页面的局部缓存.使用方法如下: <%@taglib uri="https://www.360docs.net/doc/d617313985.html,/oscache" prefix="cache"%>

EHCache 技术文档 缓存 spring缓存

目录 0. 文档介绍 (2) 0.1文档目的 (2) 0.2文档范围 (2) 0.3读者对象 (2) 0.4参考文献 (2) 0.5术语与缩写解释 (3) 1.概述 (4) 1.1背景 (4) 1.2主要特征 (3) 1.3环境 (5) 1.4下载资源 (5) 2. EHCACHE页面缓存的配置 (5) 2.1EHC ACHE的类层次模型 (5) 2.2环境搭建 (6) 2.3 EHCACHE配置文件中元素说明................................................... 错误!未定义书签。 2.4在工程中单独使用...................................................................... 错误!未定义书签。 3. 在SPRING中运用EHCACHE ....................................................... 错误!未定义书签。 4. 分布式缓存集群环境配置 (19) 4.1集群配置方式 (19) 5. 测试用例 (28)

0. 文档介绍 0.1 文档目的 记录使用EHCache实现页面级的缓存以及完成集群设计的过程。0.2 文档范围 记录使用EHCache实现页面级的缓存以及完成集群设计的过程。0.3 读者对象 任何有兴趣的家伙。 0.4 参考文献 提示:列出本文档的所有参考文献(可以是非正式出版物),格式如下:[标识符] 作者,文献名称,出版单位(或归属单位),日期 大部分都是网络上查询的资料,很多,不列举了。

Ehcache是现在最流行纯Java开源缓存框架

Ehcache是现在最流行的纯Java开源缓存框架 2014-12-22 13:28 37723人阅读评论(0) 收藏举报分类: java(405) c:\t _blank Ehcache是现在最流行的纯Java开源缓存框架,配置简单、结构清晰、功能强大,最初知道它,是从hibernate的缓存开始的。网上中文的EhCache材料以简单介绍和配置方法居多,如果你有这方面的问题,请自行google;对于API,官网上介绍已经非常清楚,请参见官网;但是很少见到特性说明和对实现原理的分析,因此在这篇文章里面,我会详细介绍和分析EhCache的特性,加上一些自己的理解和思考,希望对缓存感兴趣的朋友有所收获。 一、特性一览,来自官网,简单翻译一下: 1、快速轻量 过去几年,诸多测试表明Ehcache是最快的Java缓存之一。 Ehcache的线程机制是为大型高并发系统设计的。 大量性能测试用例保证Ehcache在不同版本间性能表现得一致性。 很多用户都不知道他们正在用Ehcache,因为不需要什么特别的配置。 API易于使用,这就很容易部署上线和运行。 很小的jar包,Ehcache 2.2.3才668kb。 最小的依赖:唯一的依赖就是SLF4J了。 2、伸缩性 缓存在内存和磁盘存储可以伸缩到数G,Ehcache为大数据存储做过优化。 大内存的情况下,所有进程可以支持数百G的吞吐。 为高并发和大型多CPU服务器做优化。 线程安全和性能总是一对矛盾,Ehcache的线程机制设计采用了Doug Lea的想法来获得较高的性能。 单台虚拟机上支持多缓存管理器。

通过Terracotta服务器矩阵,可以伸缩到数百个节点。 3、灵活性 Ehcache 1.2具备对象API接口和可序列化API接口。 不能序列化的对象可以使用除磁盘存储外Ehcache的所有功能。 除了元素的返回方法以外,API都是统一的。只有这两个方法不一致:getObjectValue和getKeyValue。这就使得缓存对象、序列化对象来获取新的特性这个过程很简单。 支持基于Cache和基于Element的过期策略,每个Cache的存活时间都是可以设置和控制的。 提供了LRU、LFU和FIFO缓存淘汰算法,Ehcache 1.2引入了最少使用和先进先出缓存淘汰算法,构成了完整的缓存淘汰算法。 提供内存和磁盘存储,Ehcache和大多数缓存解决方案一样,提供高性能的内存和磁盘存储。 动态、运行时缓存配置,存活时间、空闲时间、内存和磁盘存放缓存的最大数目都是可以在运行时修改的。 4、标准支持 Ehcache提供了对JSR107 JCACHE API最完整的实现。因为JCACHE在发布以前,Ehcache的实现(如net.sf.jsr107cache)已经发布了。 实现JCACHE API有利于到未来其他缓存解决方案的可移植性。 Ehcache的维护者Greg Luck,正是JSR107的专家委员会委员。 5、可扩展性 监听器可以插件化。Ehcache 1.2提供了CacheManagerEventListener和CacheEventListener接口,实现可以插件化,并且可以在ehcache.xml里配置。 节点发现,冗余器和监听器都可以插件化。 分布式缓存,从Ehcache 1.2开始引入,包含了一些权衡的选项。Ehcache的团队相信没有什么是万能的配置。 实现者可以使用内建的机制或者完全自己实现,因为有完整的插件开发指南。 缓存的可扩展性可以插件化。创建你自己的缓存扩展,它可以持有一个缓存的引用,并且绑定在缓存的生命周期内。 缓存加载器可以插件化。创建你自己的缓存加载器,可以使用一些异步方法来加载数据到缓存里面。 缓存异常处理器可以插件化。创建一个异常处理器,在异常发生的时候,可以执行某些特定操作。

教你如何提取网页中的视频、音乐歌曲、

教你如何提取网页中的视频、音乐歌曲、flash、图片等多媒体文件(很实用) 打开网页后,发现里面有好看的视频、好听的音乐、好看的图片、很炫的flash,是不是想把它们弄到自己电脑上或手机、mp4上?但很多时候视频无法下载,音乐只能试听,或者好听的背景音乐根本就不知道什么名字,更别说怎么下了;至于图片直接右键另存为即可,不过如果网页突然关掉了,但又想把看过的图片弄下来,而忘了图片网页地址或者不想再通过历史记录打开,这时又该怎么办? 其实这些问题都能很好的解决,并且很简单,只要用一个软件 来替你从电脑的缓存中搜索一下就OK了,因为网页中显示的内容基本 上全部都在缓存中,如果自己手动搜索,那将是很累人滴,又不好找,东西太多,又没分类。 无意中发现一个小软件很强(对此感兴趣,本人玩过无数小软件),我一直在用,也是用它帮了很多网友的忙,为了让更多的网友解决问题,于是拿来和亲们分享一下。不废话了,下面进入主题: 这款免费小软件就是YuanBox(元宝箱)v1.6,百度一搜就能下载。 下面是我自己整理的使用步骤,供亲们参考(其实不用看就行,软件简单,不用学就会),我只是用的时间长了,很熟练罢了: 软件下好后,解压,打开里面的YuanBox.exe即可,不用安装;打开此软件前,先打开你要提取东西的网页(之后再关掉也行),这是为了保证电脑缓存中有你要的东西。 运行软件,初始界面如下图:

之后直接是flv格式视频搜索结果的界面,原因就是此软件的全称是 元宝箱FLV视频下载专家,不想要视频的话,点击最上面的设置或者最下面的高级设置,即可进行搜索范围设定

下面是搜索条件设定界面 以swf格式flash为例,进行搜索,选择类型中的第二项 点击确定,开始搜索,结果如下:

下载网页视频方法

微博上看到的视频下载到电脑上的方法 分步阅读 我们刷微博时经常会看到网友发表视频,看到一些很棒的视频你是不是想下载到电脑上呢?网上可以找到很多所谓的教程,适用范围都不普遍。现在分类介绍下载那些视频的方法。 工具/原料 ?浏览器(建议使用IE) ?迅雷 ?部分视频网站的专用下载工具(如优酷、土豆) 第一类:有专用下载器的(如优酷、土豆) 1. 1 首先,下载视频的第一步就是进入原网页。在微博上就能找到(红框所示)。 每一条分享视频的微博都会有一个这样的图标,点它就能进入原网页。 2. 2 进入了原网页,接下来就是用那些下载器来下载了。第一类是比较简单的。 END 第二类:美拍视频 1. 1

由美图秀秀推出的“美拍”应用如今越来越受欢迎,使用人数也很多。美拍的视频在电脑上可以用迅雷来下载。第一步依然是进入原网页。 2. 2 进入原网页后,在网页内空白处右击鼠标,选择“查看源代码”。 3. 3 在源代码界面里你会看到一个“http://…….mp4”的地址,如果找不到,可以按组合键Ctrl+F打开查找功能,输入“.mp4”查找。找到这个地址后复制它,这时如果你的迅雷已经打开,就会自动弹出建立新任务的提示。这样就能把美拍的视频下载好了。美拍这一类视频的网页在源代码中有完整视频地址,下载相对也比较方便。 END 第三类:只能找缓存文件的(如秒拍、微博视频) 1. 1 秒拍似乎已经过气了,“微博视频”也是现在手机微博的功能,经常被使用。这两种视频是以Flash的形式播放的,地址在源代码里找不到。很多网友都说可以在缓存文件里找到,但如今的主流浏览器(如360、百度)为了减少内存占用量,是不保存大部分视频的缓存文件的,实践证明用360看过这两种视频后,缓存文件里根本找不到对应文件。因此假如你对这个视频有比较执着的喜爱,那就麻烦一下找IE浏览器帮忙吧。 2. 2

Java代码优化

1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生,以达到节约资源的目的; 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。 2. 尽量避免随意使用静态变量 要知道,当某个对象被定义为stataic变量所引用,那么gc通常是不会回收这个对象所占有的内存,如 Java代码 public class A{ static B b = new B(); } 此时静态变量b的生命周期与A类同步,如果A类不会卸载,那么b对象会常驻内存,直到程序终止。 3. 尽量避免过多过常的创建Java对象 尽量避免在经常调用的方法,循环中new对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度的重用对象,最好能用基本的数据类型或数组来替代对象。 4. 尽量使用final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如https://www.360docs.net/doc/d617313985.html,ng.String.为String类指定final防止了使用者覆盖length()方法。另外,如果一个类是final的,则该类所有方法都是final的。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%.

5. 尽量使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。 6. 尽量处理好包装类型和基本类型两者的使用场所 虽然包装类型和基本类型在使用过程中是可以相互转换,但它们两者所产生的内存区域是完全不同的,基本类型数据产生和处理都在栈中处理,包装类型是对象,是在堆中产生实例。 在集合类对象,有对象方面需要的处理适用包装类型,其他的处理提倡使用基本类型。 7. 慎用synchronized,尽量减小synchronize的方法 都知道,实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。synchronize方法被调用时,直接会把当前对象锁了,在方法执行完之前其他线程无法调用当前对象的其他方法。所以synchronize的方法尽量小,并且应尽量使用方法同步代替代码块同步。 8. 尽量使用StringBuilder和StringBuffer进行字符串连接 这个就不多讲了。 9. 尽量不要使用finalize方法 实际上,将资源清理放在finalize方法中完成是非常不好的选择,由于GC的工作量很大,尤其是回收Young代内存时,大都会引起应用程序暂停,所以再选择使用finalize方法进行资源清理,会导致GC负担更大,程序运行效率更差。 10. 尽量使用基本数据类型代替对象 String str = "hello"; 上面这种方式会创建一个"hello"字符串,而且JVM的字符缓存池还会缓存这个字符串; String str = new String("hello"); 此时程序除创建字符串外,str所引用的String对象底层还包含一个char[]数组,这个char[]数组依次存放了h,e,l,l,o

相关文档
最新文档