- 浏览: 233809 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
nujgnef:
[size=x-large][color=yellow][/c ...
Spring中PROPAGATION_REQUIRED的意思? -
wrq_mimi:
...
使用BeanNameAutoProxyCreator实现spring的自动代理 -
Luob.:
不行啊 ,我这里报错了org.springframework. ...
使用BeanNameAutoProxyCreator实现spring的自动代理 -
blueman2012:
附件在哪儿呢,亲亲
Ehcache缓存框架 -
zskangs1126:
mysql 基本语句
二级缓存
- EHCache 是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持read-only和read/write缓存,内存和磁盘缓存。但是不支持集群 (Clustering)。
- 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则是我们用于存放要缓存内容的地方。
Hibernate 的二级缓存策略的一般过程如下
1条件查询的时候,总是发出一条select * from table_name where ....
(选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。
2 把获得的所有数据对象根据ID放入到第二级缓存中。
3
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询
数据库,把结果按照ID放入到缓存。
4
删除、更新、增加数据的时候,同时更新缓存。
Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query
Cache。
没有分布
式缓存需求的配置:
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" <! timeToLiveSeconds="180" <! diskPersistent="false" diskExpiryThreadIntervalSeconds= "120"/> </ehcache> |
2、在
Hibernate配置文件中设置:
<!
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <! <property name="hibernate.cache.use_query_cache">true</property> |
说明一
下:如果不设置"查询缓存",那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、
list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置
hibernate.cache.use_query_cache true才行。
3、在Hbm.xml文件中在
其<set></set>中添加<cache usage="read-only"/>
4、如果需要"查询缓存",还
需要在使用Query或Criteria()时设置其setCacheable(true);属性
5、创建DAO,内容如下:
Session s =
HibernateSessionFactory.getSession(); Criteria c = s.createCriteria(Xyz.class); c.setCacheable(true);//这句必须要有 System.out.println("第一次读取"); List l = c.list(); System.out.println(l.size()); HibernateSessionFactory.closeSession(); s = HibernateSessionFactory.getSession(); c = s.createCriteria(Xyz.class); c.setCacheable(true);//这句必须要有 System.out.println("第二次读取"); l = c.list(); System.out.println(l.size()); HibernateSessionFactory.closeSession(); |
|
6
、这时你会看到打印出来的信息为(表示第二
次并没有去读库):
第一次读取 Hibernate: * * *** 13 第二次读取 13 首页的页面缓存 一 个网站的首页估计是被访问的次数最多的,我们可以考虑给首页做一个页面缓存 缓存策略:我认为应该是某个固定时间之内不变的,比如说2分钟更新一次,以应用结构page-filter-action-service-dao-db 为例。 位置:页面缓存做到尽量靠近客户的地方,就是在page和filter之间 ,这样的优点就是第一个用户请求之后,页面被缓存,第二个用户再来请求的时候,走到filter这个请求就结束了,无需再走后面的action- service-dao-db。带来的好处是服务器压力的减低和客户段页面响应速度的加快。 <cache name="SimplePageCachingFilter" maxElementsInMemory="10" maxElementsOnDisk="10" eternal="false" overflowToDisk="true" diskSpoolBufferSizeMB="20" timeToIdleSeconds="10" timeToLiveSeconds="10"
memoryStoreEvictionPolicy="LFU" /> 接着我们来看一下 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也会解压后再 返回流),这样做的优点是节省带宽,缺点就是增加了客户浏览器的负担。
Ehcache 的三种清空策略 1 FIFO,first in first out,这个是大家最熟的,先进先出。 2 LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。 3 LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的 元素将被清出缓存。 |
发表评论
-
web.xml里<filter-mapping>中的<dispatcher>作用
2010-06-19 09:30 1102关键字: xml里<filter-mapping> ... -
Java基本功—Reference
2010-05-25 22:22 985这是一篇一年多之前便已写就的文章,那时,因为很多Java程 ... -
MyEclipse 8.5 开发环境配置,汉化,Aptana2.0插件,SVN 插件,Flex Builder 3/4 插件安装
2010-05-25 11:33 1232MyEclipse 8.5 开发环境配 ... -
根据IE版本不同调用不同CSS样式文件
2010-05-24 22:13 1674在webjx.com的文章中,并不提倡这样的方法,但是依然有很 ... -
java singleton
2010-05-17 17:12 1479Java singleton是指这样的类,它只能实例化一次,s ... -
搭建Android开发环境
2010-05-12 15:15 4280Android的开发现在是如火如荼,逞现在不是很忙了,学习了下 ... -
java中堆(heap)和堆栈(stack)有什么区别 备份
2010-05-12 11:24 1017stack 和 heep 都是内存的 ... -
EL表达式
2010-04-20 12:05 1147EL 全名为 Expression Language ... -
解读Tomcat服务器server.xml文件
2010-03-31 13:26 946<Server port="8005&qu ... -
Tomcat
2010-03-31 13:22 870Tomcat启动分析 1 - Tomcat Serve ... -
配置svn的问题
2010-03-02 20:04 1664Unsupported FS formatsvn: 期望文件 ... -
获取雅虎的天气情况
2010-02-24 14:02 1269package lee; import java.io.In ... -
关于解决MyEclipse 的耗内存的办法
2010-01-28 14:48 9521、老是弹出Quick update error 、关闭mye ... -
HashMap和HashTable的区别和不同 转载总结
2010-01-27 17:23 1522Hashtable和HashMap类有三个重要的不同之处。第一 ... -
一堂如何提高代码质量的培训课(3)
2010-01-26 10:36 8403)职责驱动设计和领 ... -
一堂如何提高代码质量的培训课(2)
2010-01-26 10:35 8463.可变更性 前面我提到了,软件的变更性是所有软件理论的 ... -
一堂如何提高代码质量的培训课
2010-01-25 13:21 983今天这堂培训课讲什么呢?我既不讲Spring,也不讲Hiber ...
相关推荐
### Ehcache知识详解 #### 一、概述 Ehcache是一款功能强大且高效的纯Java开源缓存框架。作为当前最受欢迎的缓存方案之一,Ehcache以其简单的配置、清晰的结构以及强大的功能著称。其最初的知名度来源于作为...
**Ehcache简介** Ehcache是一款开源的Java缓存框架,它被广泛应用于提高应用程序性能,通过存储数据副本以减少对数据库的访问。Ehcache最初由Tomi Tirro设计,现在是Terracotta公司的产品,是Java世界中常用的二级...
一、Ehcache简介 Ehcache是由Terracotta公司开发的内存缓存框架,它被广泛应用于各种Java应用程序,包括Web应用、大数据处理、数据库连接池等场景。Ehcache提供了一个简单易用的API,允许开发者轻松地在应用中集成...
#### 一、Ehcache简介 Ehcache是一个高效的纯Java进程内缓存框架,以其快速且轻便的特点而被广泛应用于各种应用场景中,尤其在Java EE和轻量级容器环境中更是受到青睐。Ehcache支持多种缓存策略,包括内存和磁盘...
**Ehcache简介** Ehcache是由Terracotta公司开发的,它遵循Java Cache Specification (JSR-107),旨在提供本地内存缓存,以减少对数据库或其他慢速数据源的访问。Ehcache的核心特性包括内存管理、磁盘存储、缓存分区...
1. Ehcache简介 Ehcache是由Terracotta公司开发的开源缓存解决方案,它支持内存和磁盘存储,并且可以与其他Java应用程序服务器集成。Ehcache的核心特性包括:高效的缓存管理、内存和硬盘的二级缓存、缓存过期策略...
**一、Ehcache简介** Ehcache是一个开放源代码的、内存级别的、分布式缓存系统。它可以有效地减少数据库负载,提高应用程序的运行效率。Ehcache支持本地缓存、分布式缓存,并且与Hibernate、Spring等框架有良好的...
**Ehcache简介** Ehcache是一个开源的Java缓存解决方案,它被广泛用于提高应用程序的性能和响应速度。Ehcache支持在内存和磁盘上存储数据,并且可以配置为分布式缓存,以适应大型分布式系统的需求。由于Ehcache的...
#### 二、Ehcache简介 - **定义**:Ehcache是一种高性能、轻量级的缓存解决方案,广泛应用于Java应用中。它可以实现读写缓存(read/write cache)和只读缓存(read-only cache),并且支持内存缓存和磁盘缓存。 - **特点...
2. Ehcache简介 Ehcache是一款基于内存的分布式缓存系统,用于存储和检索数据,其主要目标是提高应用的响应速度和减少对后端数据库的压力。Ehcache支持两种缓存模式:本地缓存和分布式缓存。本地缓存适用于单机应用...
#### 一、EHCache简介 **EHCache** 是一个用 Java 实现的高效、简洁的缓存管理类库。它不仅适用于开发高性能的应用程序,而且由于其实现了线程安全,因此非常适合在多线程环境中使用。EHCache 提供了多种灵活的缓存...
**Ehcache简介** Ehcache是一款开源的、高性能的Java缓存框架,它被广泛应用于J2EE环境中,以提升应用程序的性能和响应速度。Ehcache的主要目标是通过缓存经常访问的数据来减少数据库的负载,从而提高系统的整体...
1. **Ehcache简介** Ehcache是一个高性能、轻量级的缓存解决方案,支持本地内存缓存和分布式缓存。它可以被集成到Spring、Hibernate等框架中,用于缓存数据库查询结果、对象或任何其他数据,以减少对数据库的访问,...
EHCache简介** EHCache是一种广泛使用的高性能、轻量级的Java缓存框架。它支持多级缓存、缓存分区、缓存过期策略等多种特性,适用于Java EE应用服务器、轻量级容器等环境。EHCache可以显著提高应用程序的响应速度...
1. **Ehcache简介** Ehcache是由Terracotta公司开发的开源缓存系统,支持本地内存缓存、磁盘存储和分布式缓存。它的核心特性包括快速访问、自动过期管理、缓存加载策略等。Ehcache遵循Java Cache API(JSR-107),...
#### 一、EHCache简介 EHCache 是一款开源的 Java 缓存框架,用于在应用程序中实现缓存功能。它提供了高性能、内存和磁盘缓存支持,使得开发者能够轻松地管理和控制数据的缓存策略。EHCache 可以在开发模式下作为...
#### 一、ehcache简介 ehcache是一款开源的、纯Java的语言缓存框架,主要用于提高应用程序性能。它提供了一种在内存中存储对象的方法,能够帮助开发者快速实现对数据的缓存操作,从而减少对数据库等后端系统的访问...
#### 二、Ehcache简介与缓存原理 ##### 2.1 关于缓存 缓存是一种存储机制,用于临时保存数据副本,以便快速访问这些数据。通过减少对原始数据源的访问次数,可以显著提高应用程序的响应时间和整体性能。 ##### 2.2...