两个最著名的开源java 缓存解决方案的厂商现在由于 Terracotta 对 Ehcache 的收购联合到一起了。 Terracotta,目前唯一的提供JVM级别的“POJO clustering集群”的厂商,能够提供多线程单一JVM应用,并且能让它们跨JVMs运行而不需要修改任何代码。Ehcache是目前部署使用最广泛的缓存应用,它提供了标准的HashMap类型接口,类似Oracle Coherence。这个合并对Java缓存领域将产生深远的影响。
二级缓存
* EHCache是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持read-only和read/write缓存,内存和磁盘缓存。是一个非常轻量级的缓存实现,而且从1.2 之后就支持了集群,目前的最新版本是1.4 。
* OSCache是另外一个开源的缓存方案。它同时还支持JSP页面或任意对象的缓存。OSCache功能强大、灵活,和EHCache一样支持read-only和 read/write缓存、支持内存和磁盘缓存。同时,它还提供通过JGroups或JMS进行集群的基本支持。
* SwarmCache 是一个简单的、基于JavaGroups提供集群的缓存方案。支持read-only和nonstrict read/write缓存。这种缓存适用于读操作远远高于写操作频率的应用。
* JBoss TreeCache 是一个强大的、可复制(同步或异步)和支持事务的缓存。如果你需要一个真正的支持事务的缓存架构,使用这个方案吧。
EHCache的使用场合
1比较少更新表数据
EhCache一般要使用在比较少执行write操作的表(包括update,insert,delete等)[Hibernate的二级缓存也都是这样];
2 对并发要求不是很严格的情况
两台机子中的缓存是不能实时同步的;
Ehcache的类层次模型
主要为三层,最上层的是CacheManager,他是操作Ehcache的入口。我们可以通过CacheManager.getInstance()获得一个单子的CacheManger,或者通过CacheManger的构造函数创建 一个新的CacheManger。每个CacheManager都管理着多个Cache。而每个Cache都以一种类Hash的方式,关联着多个 Element。Element则是我们用于存放要缓存内容的地方。
1.先下载ehcache的jar包。
最新版本: ehcache-1.4 released。
解压后,有几个文件:
ehcache-1.4.0.jar:需要将它放置到WEB-INF/lib下
ehcache-1.4.0-remote-debugger.jar:不要发布到工程中,是用来调试和监控你的cache状况的
ehcache-1.4.0-sources.jar:源代码
ehcache.xml :重要的配置文件,需要复制到classpath下 。
2.ehcach.xml配置文件主要参数的解释,其实文件里有详细的英文注释//DiskStore 配置,cache文件的存放目录 ,主要的值有
* user.home - 用户主目录
* user.dir - 用户当前的工作目录
* java.io.tmpdir - Default temp file path默认的temp文件目录
范例
1、首先设置EhCache,建立配置文件ehcache.XML,默认的位置在class- path,可以放到你的src目录下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="Java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000" <!- 缓存最大数目 ->
eternal="false" <!- 缓存是否持久 ->
overflowToDisk="true" <!- 是否保存到磁盘,当系统当机时->
timeToIdleSeconds="300" <!- 当缓存闲置n秒后销毁 ->
timeToLiveSeconds="180" <!- 当缓存存活n秒后销毁->
diskPersistent="false"
diskExpiryThreadIntervalSeconds= "120"/>
</ehcache>
了解ehcache 的几个概念,
1 timeToIdleSeconds ,多长时间不访问该缓存,那么ehcache 就会清除该缓存。
2 timeToLiveSeconds ,缓存的存活时间,从开始创建的时间算起。
Ehcache的三种清空策略
1 FIFO,first in first out,这个是大家最熟的,先进先出。
2 LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。
3 LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
首页的页面缓存
一个网站的首页估计是被访问的次数最多的,我们可以考虑给首页做一个页面缓存
缓存策略:我认为应该是某个固定时间之内不变的,比如说2分钟更新一次,以应用结构page-filter-action-service-dao-db 为例。
位置:页面缓存做到尽量靠近客户的地方,就是在page和filter之间 ,这样的优点就是第一个用户请求之后,页面被缓存,第二个用户再来请求的时候,走到filter这个请求就结束了,无需再走后面的action- service-dao-db。带来的好处是服务器压力的减低和客户段页面响应速度的加快。
首页的页面缓存的存活时间,我们定的是2 分钟,那么也就是说我们的timeToLiveSeconds 应该设置为120 ,同时我们的timeToIdleSeconds 最好也设置为2 分钟,或者小于2 分钟。我们来看一下下面这个配置,这个配置片段应该放到ehcache.xml中:
SimplePageCachingFilter 是缓存的名字,maxElementsInMemory 表示内存中SimplePageCachingFilter 缓存中元素的最大数量为10,maxElementsOnDisk 是指持久化该缓存的元素到硬盘上的最大数量也为10 (),eternal=false 意味着该缓存会死亡。overflowToDisk=true 意思是表示当缓存中元素的数量超过限制时,就把这些元素持久化到硬盘,如果overflowToDisk 是false ,那么maxElementsOnDisk 的设置就没有什么意义了。memoryStoreEvictionPolicy=LFU 是指按照缓存的hit 值来清除,也就是说缓存满了之后,新的对象需要缓存时,将会将缓存中hit 值最小的对象清除出缓存,给新的对象腾出地方来了
接着我们来看一下SimplePageCachingFilter的配置,
<filter>
<filter-name>indexCacheFilterfilter-name>
<filter-class>
net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter
filter-class>
filter>
<filter-mapping>
<filter-name>indexCacheFilter<filter-name>
<url-pattern>*index.action<url-pattern>
filter-mapping>
就只需要这么多步骤,我们就可以给某个页面做一个缓存的,把上面这段配置放到你的web.xml中,那么当你打开首页的时候,你会发现,2分钟才会有一堆 sql语句出现在控制台上。
cachefilter中还有一个特性,就是gzip,也就是说缓存中的元素是被压缩过的,如果客户浏览器支持压缩的话,filter会直接返回压缩过的流,这样节省了带宽,把解压的工作交给了客户浏览器,如果客户的浏览器不支持gzip,那么filter会把缓存的元素拿出来解压后再返回给客户浏览器(大多数爬虫是不支持gzip的,所以filter也会解压后再返回流),这样做的优点是节省带宽,缺点就是增加了客户浏览器的负担。
转自:
http://www.blogjava.net/liuwentao253/archive/2010/02/05/312081.html
分享到:
相关推荐
NULL 博文链接:https://showmystage.iteye.com/blog/538609
整理下ehcache知识介绍,供大家了解
主要介绍了Ehcache简介,使用Spring的AOP进行整合,可以灵活的对方法的返回结果对象进行缓存
2. EHCache 简介 Ehcache is a widely used java distributed cache for general purpose caching, Java EE and light-weight containers. It features memory and disk stores, replicate by copy and invalidate, ...
1)Demo 学习要点简介: 1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回...
对数据缓存技术的一个总结,文档比较全面的阐述了缓存类型,功能特性和相关技术。
配置 EhCache 的实例 1、 简介: EhCache缓存插件是Hibernate的另一个项目,Hibernate框架内置了对它 的支持,对于单机应用推荐使用它做为Hibernate的二级缓存。
项目简介:此项目只是简单的集成spring+springmvc+shiro+ehcahce 二: 步骤说明: 1:项目集成spring 在web.xml中配置spring容器的监听器。 2:项目集成springmvc 在web.xml中配置前端控制器 3:项目集成...
收集的jar包和资料,实际使用无问题,欢迎下载,如不能使用,请及时联系发布者 简介:二级缓存ehcache pom、开启二级缓存和查询缓存配置
Hibernate三级缓存机制简介: 一级缓存 :基于Session级别分配一块缓存空间,缓存访问的对象信息。Session关闭后会自动清除缓存。 二级缓存 :是SessionFactory对象缓存,可以被创建出的多个 Session 对象共享,二...
mayday博客系统,基于springboot、mybatis、ehcache、thymeleaf、bootstrap做的博客系统,完美自适应,支持markdown编辑器.zip 当然可以,以下是一份关于您的Java SpringBoot项目的简介描述: 探索Java的SpringBoot...
OSCache和Ehcache应用介绍,主要对页面缓存、服务器缓存相关应用的介绍
常用功能:会话(session),安全性(rbac权限框架),shiro(rbac权限框架),oauth(第三方登录),logback(日志),log-aop(AOP方式日志),ehcache(ehcache缓存),异常(统一异常处理),Async(异步
开发工具 1.Eclipse IDE:采用Maven项目管理,模块化。 2.代码生成:通过界面方式简单配置...缓存:Redis、ehcache 消息中间件:ActiveMQ 负载均衡:Nginx 分布式文件:FastDFS 数据库连接池:Alibaba Druid 1.0
项目简介 校友录网站。作为毕业设计,为母校设计校友交流平台。基于javaWeb,由Maven构建管理,采用Spring+SpringMVC+MyBatis框架,用EhCache做数据缓存。门户网站采用BootStrap设计界面,后台管理网站用AmazeUI设计...
Context-support模块:提供了对第三方库嵌入Spring应用的集成支持,比如缓存(EhCache、Guava、JCache)、邮件服务(JavaMail)、任务调度(CommonJ、Quartz)和模板引擎(FreeMarker、JasperReports、速率)。 SpEL模块:...
功能简介 1. 用户管理 2. 角色管理 3. 部门管理 4. 菜单管理 5. 字典管理 6. 业务日志 7. 登录日志 8. 监控管理 9. 通知管理 10. 代码生成 所用框架 前端 1. Bootstrap v3.3.6 2. jQuery v2.1.4 3. bootstrap-...
第1章 介绍与安装平台简介 Shopping商城系统是采用Java语言开发的多用户商城系统,使用 Spring+JPA+Velocity+Ehcache作
框架简介 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java开发平台。 本人在开发中,使用了此项目,同时在开发过程中,对项目进行了部分优化修改,感谢原作者. 初始管理员账号:...